diff options
author | vmpstr <vmpstr@chromium.org> | 2015-05-28 19:58:03 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-29 02:58:31 +0000 |
commit | 0b04451caf7622a5b4fe2149b5ccf767795c183c (patch) | |
tree | 915409f43616fd1fa360dad31650f9a098877535 /cc/quads | |
parent | 7c907f0a3aeb080691bfb1d74d3c46bc577e15cb (diff) | |
download | chromium_src-0b04451caf7622a5b4fe2149b5ccf767795c183c.zip chromium_src-0b04451caf7622a5b4fe2149b5ccf767795c183c.tar.gz chromium_src-0b04451caf7622a5b4fe2149b5ccf767795c183c.tar.bz2 |
cc: Added draw_quad_perftest, IterateResources test.
This patch adds an IterateResources perftest. Results of the initial
run on z620:
[ RUN ] DrawQuadPerfTest.IterateResources
*RESULT draw_quad_iterate_resources: 10_quads= 686016.5625 runs/s
*RESULT draw_quad_iterate_resources: 100_quads= 78050.7890625 runs/s
*RESULT draw_quad_iterate_resources: 500_quads= 17467.80859375 runs/s
[ OK ] DrawQuadPerfTest.IterateResources (6004 ms)
R=danakj, piman@chromium.org
BUG=492765
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1159493005
Cr-Commit-Position: refs/heads/master@{#331917}
Diffstat (limited to 'cc/quads')
-rw-r--r-- | cc/quads/draw_quad_perftest.cc | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/cc/quads/draw_quad_perftest.cc b/cc/quads/draw_quad_perftest.cc new file mode 100644 index 0000000..459d4ea --- /dev/null +++ b/cc/quads/draw_quad_perftest.cc @@ -0,0 +1,116 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <vector> + +#include "base/bind.h" +#include "base/time/time.h" +#include "cc/debug/lap_timer.h" +#include "cc/quads/draw_quad.h" +#include "cc/quads/render_pass.h" +#include "cc/quads/texture_draw_quad.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/perf/perf_test.h" + +namespace cc { +namespace { + +static const int kTimeLimitMillis = 2000; +static const int kWarmupRuns = 5; +static const int kTimeCheckInterval = 10; + +ResourceId Increment(ResourceId resource_id) { + return resource_id + 1; +} + +SharedQuadState* CreateSharedQuadState(RenderPass* render_pass) { + gfx::Transform quad_transform = gfx::Transform(1.0, 0.0, 0.5, 1.0, 0.5, 0.0); + gfx::Size content_bounds(26, 28); + gfx::Rect visible_content_rect(10, 12, 14, 16); + gfx::Rect clip_rect(19, 21, 23, 25); + bool is_clipped = false; + float opacity = 1.f; + int sorting_context_id = 65536; + SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode; + + SharedQuadState* state = render_pass->CreateAndAppendSharedQuadState(); + state->SetAll(quad_transform, content_bounds, visible_content_rect, clip_rect, + is_clipped, opacity, blend_mode, sorting_context_id); + return state; +} + +class DrawQuadPerfTest : public testing::Test { + public: + DrawQuadPerfTest() + : timer_(kWarmupRuns, + base::TimeDelta::FromMilliseconds(kTimeLimitMillis), + kTimeCheckInterval) {} + + void CreateRenderPass() { + render_pass_ = RenderPass::Create(); + SharedQuadState* new_shared_state( + CreateSharedQuadState(render_pass_.get())); + shared_state_ = render_pass_->CreateAndAppendSharedQuadState(); + shared_state_->CopyFrom(new_shared_state); + } + + void CleanUpRenderPass() { + render_pass_.reset(); + shared_state_ = nullptr; + } + + void GenerateTextureDrawQuads(int count, std::vector<DrawQuad*>* quads) { + for (int i = 0; i < count; ++i) { + TextureDrawQuad* quad = + render_pass_->CreateAndAppendDrawQuad<TextureDrawQuad>(); + gfx::Rect rect(0, 0, 100, 100); + ResourceId resource_id = 1; + bool premultiplied_alpha = true; + gfx::PointF uv_top_left(0, 0); + gfx::PointF uv_bottom_right(1, 1); + SkColor background_color = SK_ColorRED; + float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f}; + bool y_flipped = false; + bool nearest_neighbor = true; + + quad->SetNew(shared_state_, rect, rect, rect, resource_id, + premultiplied_alpha, uv_top_left, uv_bottom_right, + background_color, vertex_opacity, y_flipped, + nearest_neighbor); + quads->push_back(quad); + } + } + + void RunIterateResourceTest(const std::string& test_name, int quad_count) { + CreateRenderPass(); + std::vector<DrawQuad*> quads; + GenerateTextureDrawQuads(quad_count, &quads); + + timer_.Reset(); + DrawQuad::ResourceIteratorCallback callback = base::Bind(&Increment); + do { + for (auto* quad : quads) + quad->IterateResources(callback); + timer_.NextLap(); + } while (!timer_.HasTimeLimitExpired()); + + perf_test::PrintResult("draw_quad_iterate_resources", "", test_name, + timer_.LapsPerSecond(), "runs/s", true); + CleanUpRenderPass(); + } + + private: + scoped_ptr<RenderPass> render_pass_; + SharedQuadState* shared_state_; + LapTimer timer_; +}; + +TEST_F(DrawQuadPerfTest, IterateResources) { + RunIterateResourceTest("10_quads", 10); + RunIterateResourceTest("100_quads", 100); + RunIterateResourceTest("500_quads", 500); +} + +} // namespace +} // namespace cc |