anchor.diff:      final unparser = new Unparser.withRenamer((Node node) => renames[node]);
       emitCode(unparser, imports, topLevelNodes, memberNodes);
       compiler.assembledCode = unparser.result;
  +
  +    // Output verbose info about size ratio of resulting bundle to all
  +    // referenced non-platform sources.
  +    logResultBundleSizeInfo(topLevelElements);
  +  }
  +
  +  void logResultBundleSizeInfo(Set<Element> topLevelElements) {
  +    Collection<LibraryElement> referencedLibraries =
  +        compiler.libraries.getValues().filter(isUserLibrary);
  +    // Sum total size of scripts in each referenced library.
  +    int nonPlatformSize = 0;
  +    for (LibraryElement lib in referencedLibraries) {
  +      for (CompilationUnitElement compilationUnit in lib.compilationUnits) {
  +        nonPlatformSize += compilationUnit.script.text.length;
  +      }
  +    }
  +    int percentage = compiler.assembledCode.length * 100 ~/ nonPlatformSize;
  +    log('Total used non-platform files size: ${nonPlatformSize} bytes, '
  +        'bundle size: ${compiler.assembledCode.length} bytes (${percentage}%)');
     }
   
     log(String message) => compiler.log('[DartBackend] $message');
  
positive.code:   void codegen(WorkItem work) { }
    void processNativeClasses(Enqueuer world,
                              Collection<LibraryElement> libraries) { }
  
    void assembleProgram() {
      // Conservatively traverse all platform libraries and collect member names.
  
negative.code:      * Tells whether we should output given element. Corelib classes like
       * Object should not be in the resulting code.
       */
      bool shouldOutput(Element element) =>
        element.kind !== ElementKind.VOID &&
        isUserLibrary(element.getLibrary()) &&
        element is !SynthesizedConstructorElement &&
        element is !AbstractFieldElement;
  
  