1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/renderer/skia_benchmarking_extension.h"
7 #include "base/values.h"
8 #include "skia/ext/benchmarking_canvas.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/skia/include/core/SkCanvas.h"
11 #include "third_party/skia/include/core/SkGraphics.h"
15 testing::AssertionResult
HasArg(const base::ListValue
* args
,
17 const base::DictionaryValue
* arg
;
19 for (size_t i
= 0; i
< args
->GetSize(); ++i
) {
20 if (!args
->GetDictionary(i
, &arg
) || arg
->size() != 1)
21 return testing::AssertionFailure() << " malformed argument for index "
24 if (arg
->HasKey(name
))
25 return testing::AssertionSuccess() << " argument '" << name
26 << "' found at index " << i
;
29 return testing::AssertionFailure() << "argument not found: '" << name
<< "'";
36 TEST(SkiaBenchmarkingExtensionTest
, BenchmarkingCanvas
) {
39 // Prepare canvas and resources.
40 SkCanvas
canvas(100, 100);
41 skia::BenchmarkingCanvas
benchmarking_canvas(&canvas
);
44 red_paint
.setColor(SkColorSetARGB(255, 255, 0, 0));
45 SkRect fullRect
= SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100));
46 SkRect fillRect
= SkRect::MakeXYWH(SkIntToScalar(25), SkIntToScalar(25),
47 SkIntToScalar(50), SkIntToScalar(50));
50 trans
.setTranslate(SkIntToScalar(10), SkIntToScalar(10));
52 // Draw a trivial scene.
53 benchmarking_canvas
.save();
54 benchmarking_canvas
.clipRect(fullRect
, SkRegion::kIntersect_Op
, false);
55 benchmarking_canvas
.setMatrix(trans
);
56 benchmarking_canvas
.drawRect(fillRect
, red_paint
);
57 benchmarking_canvas
.restore();
59 // Verify the recorded commands.
60 const base::ListValue
& ops
= benchmarking_canvas
.Commands();
61 ASSERT_EQ(ops
.GetSize(), static_cast<size_t>(5));
64 const base::DictionaryValue
* op
;
65 const base::ListValue
* op_args
;
68 ASSERT_TRUE(ops
.GetDictionary(index
++, &op
));
69 EXPECT_TRUE(op
->GetString("cmd_string", &op_name
));
70 EXPECT_EQ(op_name
, "Save");
71 ASSERT_TRUE(op
->GetList("info", &op_args
));
72 EXPECT_EQ(op_args
->GetSize(), static_cast<size_t>(0));
74 ASSERT_TRUE(ops
.GetDictionary(index
++, &op
));
75 EXPECT_TRUE(op
->GetString("cmd_string", &op_name
));
76 EXPECT_EQ(op_name
, "ClipRect");
77 ASSERT_TRUE(op
->GetList("info", &op_args
));
78 EXPECT_EQ(op_args
->GetSize(), static_cast<size_t>(3));
79 EXPECT_TRUE(HasArg(op_args
, "rect"));
80 EXPECT_TRUE(HasArg(op_args
, "op"));
81 EXPECT_TRUE(HasArg(op_args
, "anti-alias"));
83 ASSERT_TRUE(ops
.GetDictionary(index
++, &op
));
84 EXPECT_TRUE(op
->GetString("cmd_string", &op_name
));
85 EXPECT_EQ(op_name
, "SetMatrix");
86 ASSERT_TRUE(op
->GetList("info", &op_args
));
87 EXPECT_EQ(op_args
->GetSize(), static_cast<size_t>(1));
88 EXPECT_TRUE(HasArg(op_args
, "matrix"));
90 ASSERT_TRUE(ops
.GetDictionary(index
++, &op
));
91 EXPECT_TRUE(op
->GetString("cmd_string", &op_name
));
92 EXPECT_EQ(op_name
, "DrawRect");
93 ASSERT_TRUE(op
->GetList("info", &op_args
));
94 EXPECT_EQ(op_args
->GetSize(), static_cast<size_t>(2));
95 EXPECT_TRUE(HasArg(op_args
, "rect"));
96 EXPECT_TRUE(HasArg(op_args
, "paint"));
98 ASSERT_TRUE(ops
.GetDictionary(index
++, &op
));
99 EXPECT_TRUE(op
->GetString("cmd_string", &op_name
));
100 EXPECT_EQ(op_name
, "Restore");
101 ASSERT_TRUE(op
->GetList("info", &op_args
));
102 EXPECT_EQ(op_args
->GetSize(), static_cast<size_t>(0));
105 } // namespace content