blob: afcdad3201939e2968731c104a4bba71e7c169ce [file] [log] [blame]
// Copyright 2013 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 "content/common/cc_messages.h"
#include "base/test/launcher/unit_test_launcher.h"
#include "base/test/test_suite.h"
#include "cc/output/compositor_frame.h"
#include "ipc/ipc_message.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/perf/perf_test.h"
using cc::CompositorFrame;
using cc::DelegatedFrameData;
using cc::DrawQuad;
using cc::PictureDrawQuad;
using cc::RenderPass;
using cc::SharedQuadState;
namespace content {
namespace {
class CCMessagesPerfTest : public testing::Test {};
const int kNumWarmupRuns = 10;
const int kNumRuns = 100;
TEST_F(CCMessagesPerfTest, DelegatedFrame_ManyQuads_1_4000) {
scoped_ptr<CompositorFrame> frame(new CompositorFrame);
scoped_ptr<RenderPass> render_pass = RenderPass::Create();
render_pass->shared_quad_state_list.push_back(SharedQuadState::Create());
for (int i = 0; i < 4000; ++i) {
render_pass->quad_list.push_back(
PictureDrawQuad::Create().PassAs<DrawQuad>());
}
frame->delegated_frame_data.reset(new DelegatedFrameData);
frame->delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
for (int i = 0; i < kNumWarmupRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks start = base::TimeTicks::HighResNow();
for (int i = 0; i < kNumRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks end = base::TimeTicks::HighResNow();
base::TimeDelta mean_time_delta = (end - start) / kNumRuns;
perf_test::PrintResult("mean_frame_serialization_time", "",
"DelegatedFrame_ManyQuads_1_4000",
mean_time_delta.InMicroseconds(), "us", true);
}
TEST_F(CCMessagesPerfTest, DelegatedFrame_ManyQuads_1_10000) {
scoped_ptr<CompositorFrame> frame(new CompositorFrame);
scoped_ptr<RenderPass> render_pass = RenderPass::Create();
render_pass->shared_quad_state_list.push_back(SharedQuadState::Create());
for (int i = 0; i < 4000; ++i) {
render_pass->quad_list.push_back(
PictureDrawQuad::Create().PassAs<DrawQuad>());
}
frame->delegated_frame_data.reset(new DelegatedFrameData);
frame->delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
for (int i = 0; i < kNumWarmupRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks start = base::TimeTicks::HighResNow();
for (int i = 0; i < kNumRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks end = base::TimeTicks::HighResNow();
base::TimeDelta mean_time_delta = (end - start) / kNumRuns;
perf_test::PrintResult("mean_frame_serialization_time", "",
"DelegatedFrame_ManyQuads_1_10000",
mean_time_delta.InMicroseconds(), "us", true);
}
TEST_F(CCMessagesPerfTest, DelegatedFrame_ManyQuads_4000_4000) {
scoped_ptr<CompositorFrame> frame(new CompositorFrame);
scoped_ptr<RenderPass> render_pass = RenderPass::Create();
for (int i = 0; i < 4000; ++i) {
render_pass->shared_quad_state_list.push_back(SharedQuadState::Create());
render_pass->quad_list.push_back(
PictureDrawQuad::Create().PassAs<DrawQuad>());
}
frame->delegated_frame_data.reset(new DelegatedFrameData);
frame->delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
for (int i = 0; i < kNumWarmupRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks start = base::TimeTicks::HighResNow();
for (int i = 0; i < kNumRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks end = base::TimeTicks::HighResNow();
base::TimeDelta mean_time_delta = (end - start) / kNumRuns;
perf_test::PrintResult("mean_frame_serialization_time", "",
"DelegatedFrame_ManyQuads_4000_4000",
mean_time_delta.InMicroseconds(), "us", true);
}
TEST_F(CCMessagesPerfTest, DelegatedFrame_ManyQuads_10000_10000) {
scoped_ptr<CompositorFrame> frame(new CompositorFrame);
scoped_ptr<RenderPass> render_pass = RenderPass::Create();
for (int i = 0; i < 10000; ++i) {
render_pass->shared_quad_state_list.push_back(SharedQuadState::Create());
render_pass->quad_list.push_back(
PictureDrawQuad::Create().PassAs<DrawQuad>());
}
frame->delegated_frame_data.reset(new DelegatedFrameData);
frame->delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
for (int i = 0; i < kNumWarmupRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks start = base::TimeTicks::HighResNow();
for (int i = 0; i < kNumRuns; ++i) {
IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
IPC::ParamTraits<CompositorFrame>::Write(&msg, *frame);
}
base::TimeTicks end = base::TimeTicks::HighResNow();
base::TimeDelta mean_time_delta = (end - start) / kNumRuns;
perf_test::PrintResult("mean_frame_serialization_time", "",
"DelegatedFrame_ManyQuads_10000_10000",
mean_time_delta.InMicroseconds(), "us", true);
}
} // namespace
} // namespace content