1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "base/timer/lap_timer.h"
8 #include "cc/paint/draw_image.h"
9 #include "cc/paint/paint_image_builder.h"
10 #include "cc/raster/tile_task.h"
11 #include "cc/tiles/software_image_decode_cache.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/perf/perf_result_reporter.h"
18 static const int kTimeLimitMillis = 2000;
19 static const int kWarmupRuns = 5;
20 static const int kTimeCheckInterval = 10;
22 sk_sp<SkImage> CreateImage(int width, int height) {
24 bitmap.allocPixels(SkImageInfo::MakeN32Premul(width, height));
25 return SkImage::MakeFromBitmap(bitmap);
28 SkM44 CreateMatrix(const SkSize& scale) {
29 return SkM44::Scale(scale.width(), scale.height());
32 class SoftwareImageDecodeCachePerfTest : public testing::Test {
34 SoftwareImageDecodeCachePerfTest()
36 base::Milliseconds(kTimeLimitMillis),
37 kTimeCheckInterval) {}
40 PaintFlags::FilterQuality qualities[] = {
41 PaintFlags::FilterQuality::kNone, PaintFlags::FilterQuality::kLow,
42 PaintFlags::FilterQuality::kMedium, PaintFlags::FilterQuality::kHigh};
43 std::pair<SkIRect, SkIRect> image_rect_subrect[] = {
44 std::make_pair(SkIRect::MakeWH(100, 100), SkIRect::MakeWH(100, 100)),
45 std::make_pair(SkIRect::MakeWH(100, 100), SkIRect::MakeWH(50, 50)),
46 std::make_pair(SkIRect::MakeWH(100, 100), SkIRect::MakeWH(1000, 1000))};
47 std::pair<float, float> scales[] = {
48 std::make_pair(1.f, 1.f), std::make_pair(0.5f, 0.5f),
49 std::make_pair(2.f, 2.f), std::make_pair(0.5f, 1.5f)};
51 std::vector<DrawImage> images;
52 for (auto& quality : qualities) {
53 for (auto& rect_subrect : image_rect_subrect) {
54 auto& rect = rect_subrect.first;
55 auto& subrect = rect_subrect.second;
56 for (auto& scale : scales) {
58 PaintImageBuilder::WithDefault()
59 .set_id(PaintImage::GetNextId())
60 .set_image(CreateImage(rect.width(), rect.height()),
61 PaintImage::GetNextContentId())
63 false, subrect, quality,
64 CreateMatrix(SkSize::Make(scale.first, scale.second)), 0u,
72 for (auto& image : images) {
73 SoftwareImageDecodeCache::CacheKey::FromDrawImage(image,
77 } while (!timer_.HasTimeLimitExpired());
79 perf_test::PerfResultReporter reporter("software_image_decode_cache",
81 reporter.RegisterImportantMetric("", "runs/s");
82 reporter.AddResult("", timer_.LapsPerSecond());
86 base::LapTimer timer_;
89 TEST_F(SoftwareImageDecodeCachePerfTest, FromDrawImage) {