diff options
Diffstat (limited to 'chromium/cc/debug/rasterize_and_record_benchmark.cc')
-rw-r--r-- | chromium/cc/debug/rasterize_and_record_benchmark.cc | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/chromium/cc/debug/rasterize_and_record_benchmark.cc b/chromium/cc/debug/rasterize_and_record_benchmark.cc index 4646afd6bce..197fb291a05 100644 --- a/chromium/cc/debug/rasterize_and_record_benchmark.cc +++ b/chromium/cc/debug/rasterize_and_record_benchmark.cc @@ -6,9 +6,12 @@ #include <algorithm> #include <limits> +#include <string> #include "base/basictypes.h" +#include "base/strings/stringprintf.h" #include "base/values.h" +#include "cc/debug/lap_timer.h" #include "cc/debug/rasterize_and_record_benchmark_impl.h" #include "cc/layers/layer.h" #include "cc/layers/picture_layer.h" @@ -22,11 +25,8 @@ namespace { const int kDefaultRecordRepeatCount = 100; -base::TimeTicks Now() { - return base::TimeTicks::IsThreadNowSupported() - ? base::TimeTicks::ThreadNow() - : base::TimeTicks::HighResNow(); -} +const char* kModeSuffixes[Picture::RECORDING_MODE_COUNT] = { + "", "_sk_null_canvas", "_painting_disabled", "_skrecord"}; } // namespace @@ -61,8 +61,12 @@ void RasterizeAndRecordBenchmark::DidUpdateLayers(LayerTreeHost* host) { DCHECK(!results_.get()); results_ = make_scoped_ptr(new base::DictionaryValue); results_->SetInteger("pixels_recorded", record_results_.pixels_recorded); - results_->SetDouble("record_time_ms", - record_results_.total_best_time.InMillisecondsF()); + + for (int i = 0; i < Picture::RECORDING_MODE_COUNT; i++) { + std::string name = base::StringPrintf("record_time%s_ms", kModeSuffixes[i]); + results_->SetDouble(name, + record_results_.total_best_time[i].InMillisecondsF()); + } main_thread_benchmark_done_ = true; } @@ -72,18 +76,9 @@ void RasterizeAndRecordBenchmark::RecordRasterResults( base::DictionaryValue* results = NULL; results_value->GetAsDictionary(&results); - DCHECK(results); - DCHECK(results->HasKey("pixels_rasterized")); - DCHECK(results->HasKey("rasterize_time_ms")); - - int pixels_rasterized; - results->GetInteger("pixels_rasterized", &pixels_rasterized); - double rasterize_time_ms; - results->GetDouble("rasterize_time_ms", &rasterize_time_ms); - results_->SetInteger("pixels_rasterized", pixels_rasterized); - results_->SetDouble("rasterize_time_ms", rasterize_time_ms); + results_->MergeDictionary(results); NotifyDone(results_.PassAs<base::Value>()); } @@ -108,7 +103,7 @@ void RasterizeAndRecordBenchmark::RunOnLayer(PictureLayer* layer) { DCHECK(host_); gfx::Size tile_grid_size = host_->settings().default_tile_size; - SkTileGridPicture::TileGridInfo tile_grid_info; + SkTileGridFactory::TileGridInfo tile_grid_info; PicturePileBase::ComputeTileGridInfo(tile_grid_size, &tile_grid_info); gfx::Rect visible_content_rect = gfx::ScaleToEnclosingRect( @@ -116,22 +111,40 @@ void RasterizeAndRecordBenchmark::RunOnLayer(PictureLayer* layer) { if (visible_content_rect.IsEmpty()) return; - scoped_refptr<Picture> picture = Picture::Create(visible_content_rect); - - base::TimeDelta min_time = - base::TimeDelta::FromInternalValue(std::numeric_limits<int64>::max()); - for (int i = 0; i < record_repeat_count_; ++i) { - base::TimeTicks start = Now(); - picture->Record(painter, tile_grid_info); - base::TimeTicks end = Now(); - base::TimeDelta duration = end - start; - if (duration < min_time) - min_time = duration; + for (int mode_index = 0; mode_index < Picture::RECORDING_MODE_COUNT; + mode_index++) { + Picture::RecordingMode mode = + static_cast<Picture::RecordingMode>(mode_index); + base::TimeDelta min_time = base::TimeDelta::Max(); + + // Parameters for LapTimer. + const int kTimeLimitMillis = 1; + const int kWarmupRuns = 0; + const int kTimeCheckInterval = 1; + + for (int i = 0; i < record_repeat_count_; ++i) { + // Run for a minimum amount of time to avoid problems with timer + // quantization when the layer is very small. + LapTimer timer(kWarmupRuns, + base::TimeDelta::FromMilliseconds(kTimeLimitMillis), + kTimeCheckInterval); + do { + scoped_refptr<Picture> picture = Picture::Create( + visible_content_rect, painter, tile_grid_info, false, 0, mode); + timer.NextLap(); + } while (!timer.HasTimeLimitExpired()); + base::TimeDelta duration = + base::TimeDelta::FromMillisecondsD(timer.MsPerLap()); + if (duration < min_time) + min_time = duration; + } + + if (mode == Picture::RECORD_NORMALLY) { + record_results_.pixels_recorded += + visible_content_rect.width() * visible_content_rect.height(); + } + record_results_.total_best_time[mode_index] += min_time; } - - record_results_.pixels_recorded += - visible_content_rect.width() * visible_content_rect.height(); - record_results_.total_best_time += min_time; } RasterizeAndRecordBenchmark::RecordResults::RecordResults() |