message: calculate percentage of source blocks present after each pass
  Summary: We need to figure out which passes didn't carry around the basic block source blocks.
diff: #include "ProguardReporting.h"
  #include "ReachableClasses.h"
  #include "Sanitizers.h"
  +#include "ScopedCFG.h"
  #include "Show.h"
  +#include "SourceBlocks.h"
  #include "Timer.h"
  #include "Walkers.h"
  @@ -663,6 +665,42 @@ class AfterPassSizes {
  #endif
  };
  +struct SourceBlocksStats {
  + unsigned int total_blocks;
  + unsigned int source_blocks_present;
  +
  + SourceBlocksStats& operator+=(const SourceBlocksStats& that) {
  + total_blocks += that.total_blocks;
  + source_blocks_present += that.source_blocks_present;
  + return *this;
  + }
  +};
  +
  +void track_source_block_coverage(const DexStoresVector& stores) {
  + auto stats = walk::parallel::methods<SourceBlocksStats>(
  + build_class_scope(stores), [](DexMethod* m) -> SourceBlocksStats {
  + SourceBlocksStats ret{0u, 0u};
  + auto code = m->get_code();
  + if (!code) {
  + return ret;
  + }
  +
  + cfg::ScopedCFG cfg(code);
  + for (auto block : cfg->blocks()) {
  + ret.total_blocks++;
  + if (source_blocks::has_source_blocks(block)) {
  + ret.source_blocks_present++;
  + }
  + }
  + return ret;
  + });
  +
  + TRACE(INSTRUMENT, 4,
  + "Total Basic Blocks = %d, Basic Blocks with SourceBlock = %d (%.1f%%)",
  + stats.total_blocks, stats.source_blocks_present,
  + ((double)stats.source_blocks_present) * 100 / stats.total_blocks);
  +}
  +
  } // namespace
  std::unique_ptr<keep_rules::ProguardConfiguration> empty_pg_config() {
  @@ -945,6 +983,10 @@ void PassManager::run_passes(DexStoresVector& stores, ConfigFiles& conf) {
  break;
  }
  + if (traceEnabled(INSTRUMENT, 4)) {
  + track_source_block_coverage(stores);
  + }
  +
  m_current_pass_info = nullptr;
  }
  