1// Copyright 2012 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.
4
5#include "base/macros.h"
6
7#include "cc/debug/debug_colors.h"
8
9#include "cc/trees/layer_tree_impl.h"
10
11namespace cc {
12
13static float Scale(float width, const LayerTreeImpl* tree_impl) {
14  return width * (tree_impl ? tree_impl->device_scale_factor() : 1);
15}
16
17// ======= Layer border colors =======
18
19// Tiled content layers are orange.
20SkColor DebugColors::TiledContentLayerBorderColor() {
21  return SkColorSetARGB(128, 255, 128, 0);
22}
23int DebugColors::TiledContentLayerBorderWidth(const LayerTreeImpl* tree_impl) {
24  return Scale(2, tree_impl);
25}
26
27// Image layers are olive.
28SkColor DebugColors::ImageLayerBorderColor() {
29  return SkColorSetARGB(128, 128, 128, 0);
30}
31int DebugColors::ImageLayerBorderWidth(const LayerTreeImpl* tree_impl) {
32  return Scale(2, tree_impl);
33}
34
35// Non-tiled content layers area green.
36SkColor DebugColors::ContentLayerBorderColor() {
37  return SkColorSetARGB(128, 0, 128, 32);
38}
39int DebugColors::ContentLayerBorderWidth(const LayerTreeImpl* tree_impl) {
40  return Scale(2, tree_impl);
41}
42
43// Masking layers are pale blue and wide.
44SkColor DebugColors::MaskingLayerBorderColor() {
45  return SkColorSetARGB(48, 128, 255, 255);
46}
47int DebugColors::MaskingLayerBorderWidth(const LayerTreeImpl* tree_impl) {
48  return Scale(20, tree_impl);
49}
50
51// Other container layers are yellow.
52SkColor DebugColors::ContainerLayerBorderColor() {
53  return SkColorSetARGB(192, 255, 255, 0);
54}
55int DebugColors::ContainerLayerBorderWidth(const LayerTreeImpl* tree_impl) {
56  return Scale(2, tree_impl);
57}
58
59// Surface layers are a blue-ish green.
60SkColor DebugColors::SurfaceLayerBorderColor() {
61  return SkColorSetARGB(128, 0, 255, 136);
62}
63int DebugColors::SurfaceLayerBorderWidth(const LayerTreeImpl* tree_impl) {
64  return Scale(2, tree_impl);
65}
66
67// Render surfaces are blue.
68SkColor DebugColors::SurfaceBorderColor() {
69  return SkColorSetARGB(100, 0, 0, 255);
70}
71int DebugColors::SurfaceBorderWidth(const LayerTreeImpl* tree_impl) {
72  return Scale(2, tree_impl);
73}
74
75// Replicas of render surfaces are purple.
76SkColor DebugColors::SurfaceReplicaBorderColor() {
77  return SkColorSetARGB(100, 160, 0, 255);
78}
79int DebugColors::SurfaceReplicaBorderWidth(const LayerTreeImpl* tree_impl) {
80  return Scale(2, tree_impl);
81}
82
83// ======= Tile colors =======
84
85// High-res tile borders are cyan.
86SkColor DebugColors::HighResTileBorderColor() {
87  return SkColorSetARGB(100, 80, 200, 200);
88}
89int DebugColors::HighResTileBorderWidth(const LayerTreeImpl* tree_impl) {
90  return Scale(1, tree_impl);
91}
92
93// Low-res tile borders are purple.
94SkColor DebugColors::LowResTileBorderColor() {
95  return SkColorSetARGB(100, 212, 83, 192);
96}
97int DebugColors::LowResTileBorderWidth(const LayerTreeImpl* tree_impl) {
98  return Scale(2, tree_impl);
99}
100
101// Other high-resolution tile borders are yellow.
102SkColor DebugColors::ExtraHighResTileBorderColor() {
103  return SkColorSetARGB(100, 239, 231, 20);
104}
105int DebugColors::ExtraHighResTileBorderWidth(const LayerTreeImpl* tree_impl) {
106  return Scale(2, tree_impl);
107}
108
109// Other low-resolution tile borders are green.
110SkColor DebugColors::ExtraLowResTileBorderColor() {
111  return SkColorSetARGB(100, 93, 186, 18);
112}
113int DebugColors::ExtraLowResTileBorderWidth(const LayerTreeImpl* tree_impl) {
114  return Scale(2, tree_impl);
115}
116
117// Missing tile borders are red.
118SkColor DebugColors::MissingTileBorderColor() {
119  return SkColorSetARGB(100, 255, 0, 0);
120}
121int DebugColors::MissingTileBorderWidth(const LayerTreeImpl* tree_impl) {
122  return Scale(1, tree_impl);
123}
124
125// Solid color tile borders are grey.
126SkColor DebugColors::SolidColorTileBorderColor() {
127  return SkColorSetARGB(128, 128, 128, 128);
128}
129int DebugColors::SolidColorTileBorderWidth(const LayerTreeImpl* tree_impl) {
130  return Scale(1, tree_impl);
131}
132
133// Picture tile borders are dark grey.
134SkColor DebugColors::PictureTileBorderColor() {
135  return SkColorSetARGB(64, 64, 64, 0);
136}
137int DebugColors::PictureTileBorderWidth(const LayerTreeImpl* tree_impl) {
138  return Scale(1, tree_impl);
139}
140
141// Direct picture borders are chartreuse.
142SkColor DebugColors::DirectPictureBorderColor() {
143  return SkColorSetARGB(255, 127, 255, 0);
144}
145int DebugColors::DirectPictureBorderWidth(const LayerTreeImpl* tree_impl) {
146  return Scale(1, tree_impl);
147}
148
149// ======= Checkerboard colors =======
150
151// Non-debug checkerboards are grey.
152SkColor DebugColors::DefaultCheckerboardColor() {
153  return SkColorSetRGB(241, 241, 241);
154}
155
156// Invalidated tiles get sky blue checkerboards.
157SkColor DebugColors::InvalidatedTileCheckerboardColor() {
158  return SkColorSetRGB(128, 200, 245);
159}
160
161// Evicted tiles get pale red checkerboards.
162SkColor DebugColors::EvictedTileCheckerboardColor() {
163  return SkColorSetRGB(255, 200, 200);
164}
165
166// ======= Debug rect colors =======
167
168static SkColor FadedGreen(int initial_value, int step) {
169  DCHECK_GE(step, 0);
170  DCHECK_LE(step, DebugColors::kFadeSteps);
171  int value = step * initial_value / DebugColors::kFadeSteps;
172  return SkColorSetARGB(value, 0, 195, 0);
173}
174// Paint rects in green.
175SkColor DebugColors::PaintRectBorderColor(int step) {
176  return FadedGreen(255, step);
177}
178int DebugColors::PaintRectBorderWidth() { return 2; }
179SkColor DebugColors::PaintRectFillColor(int step) {
180  return FadedGreen(60, step);
181}
182
183// Property-changed rects in blue.
184SkColor DebugColors::PropertyChangedRectBorderColor() {
185  return SkColorSetARGB(255, 0, 0, 255);
186}
187int DebugColors::PropertyChangedRectBorderWidth() { return 2; }
188SkColor DebugColors::PropertyChangedRectFillColor() {
189  return SkColorSetARGB(30, 0, 0, 255);
190}
191
192// Surface damage rects in yellow-orange.
193SkColor DebugColors::SurfaceDamageRectBorderColor() {
194  return SkColorSetARGB(255, 200, 100, 0);
195}
196int DebugColors::SurfaceDamageRectBorderWidth() { return 2; }
197SkColor DebugColors::SurfaceDamageRectFillColor() {
198  return SkColorSetARGB(30, 200, 100, 0);
199}
200
201// Surface replica screen space rects in green.
202SkColor DebugColors::ScreenSpaceLayerRectBorderColor() {
203  return SkColorSetARGB(255, 100, 200, 0);
204}
205int DebugColors::ScreenSpaceLayerRectBorderWidth() { return 2; }
206SkColor DebugColors::ScreenSpaceLayerRectFillColor() {
207  return SkColorSetARGB(30, 100, 200, 0);
208}
209
210// Layer screen space rects in purple.
211SkColor DebugColors::ScreenSpaceSurfaceReplicaRectBorderColor() {
212  return SkColorSetARGB(255, 100, 0, 200);
213}
214int DebugColors::ScreenSpaceSurfaceReplicaRectBorderWidth() { return 2; }
215SkColor DebugColors::ScreenSpaceSurfaceReplicaRectFillColor() {
216  return SkColorSetARGB(10, 100, 0, 200);
217}
218
219// Occluding rects in pink.
220SkColor DebugColors::OccludingRectBorderColor() {
221  return SkColorSetARGB(255, 245, 136, 255);
222}
223int DebugColors::OccludingRectBorderWidth() { return 2; }
224SkColor DebugColors::OccludingRectFillColor() {
225  return SkColorSetARGB(10, 245, 136, 255);
226}
227
228// Non-Occluding rects in a reddish color.
229SkColor DebugColors::NonOccludingRectBorderColor() {
230  return SkColorSetARGB(255, 200, 0, 100);
231}
232int DebugColors::NonOccludingRectBorderWidth() { return 2; }
233SkColor DebugColors::NonOccludingRectFillColor() {
234  return SkColorSetARGB(10, 200, 0, 100);
235}
236
237// Touch-event-handler rects in yellow.
238SkColor DebugColors::TouchEventHandlerRectBorderColor() {
239  return SkColorSetARGB(255, 239, 229, 60);
240}
241int DebugColors::TouchEventHandlerRectBorderWidth() { return 2; }
242SkColor DebugColors::TouchEventHandlerRectFillColor() {
243  return SkColorSetARGB(30, 239, 229, 60);
244}
245
246// Wheel-event-handler rects in green.
247SkColor DebugColors::WheelEventHandlerRectBorderColor() {
248  return SkColorSetARGB(255, 189, 209, 57);
249}
250int DebugColors::WheelEventHandlerRectBorderWidth() { return 2; }
251SkColor DebugColors::WheelEventHandlerRectFillColor() {
252  return SkColorSetARGB(30, 189, 209, 57);
253}
254
255// Scroll-event-handler rects in teal.
256SkColor DebugColors::ScrollEventHandlerRectBorderColor() {
257  return SkColorSetARGB(255, 24, 167, 181);
258}
259int DebugColors::ScrollEventHandlerRectBorderWidth() { return 2; }
260SkColor DebugColors::ScrollEventHandlerRectFillColor() {
261  return SkColorSetARGB(30, 24, 167, 181);
262}
263
264// Non-fast-scrollable rects in orange.
265SkColor DebugColors::NonFastScrollableRectBorderColor() {
266  return SkColorSetARGB(255, 238, 163, 59);
267}
268int DebugColors::NonFastScrollableRectBorderWidth() { return 2; }
269SkColor DebugColors::NonFastScrollableRectFillColor() {
270  return SkColorSetARGB(30, 238, 163, 59);
271}
272
273// Animation bounds are lime-green.
274SkColor DebugColors::LayerAnimationBoundsBorderColor() {
275  return SkColorSetARGB(255, 112, 229, 0);
276}
277int DebugColors::LayerAnimationBoundsBorderWidth() { return 2; }
278SkColor DebugColors::LayerAnimationBoundsFillColor() {
279  return SkColorSetARGB(30, 112, 229, 0);
280}
281
282// Non-Painted rects in cyan.
283SkColor DebugColors::NonPaintedFillColor() { return SK_ColorCYAN; }
284
285// Missing picture rects in magenta.
286SkColor DebugColors::MissingPictureFillColor() { return SK_ColorMAGENTA; }
287
288// Missing resize invalidations are in salmon pink.
289SkColor DebugColors::MissingResizeInvalidations() {
290  return SkColorSetARGB(255, 255, 155, 170);
291}
292
293// Picture borders in transparent blue.
294SkColor DebugColors::PictureBorderColor() {
295  return SkColorSetARGB(100, 0, 0, 200);
296}
297
298// ======= HUD widget colors =======
299
300SkColor DebugColors::HUDBackgroundColor() {
301  return SkColorSetARGB(215, 17, 17, 17);
302}
303SkColor DebugColors::HUDSeparatorLineColor() {
304  return SkColorSetARGB(255, 130, 130, 130);
305}
306SkColor DebugColors::HUDIndicatorLineColor() {
307  return SkColorSetARGB(255, 80, 80, 80);
308}
309
310SkColor DebugColors::PlatformLayerTreeTextColor() { return SK_ColorRED; }
311SkColor DebugColors::FPSDisplayTextAndGraphColor() { return SK_ColorRED; }
312SkColor DebugColors::MemoryDisplayTextColor() {
313  return SkColorSetARGB(255, 220, 220, 220);
314}
315
316// Paint time display in green (similar to paint times in the WebInspector)
317SkColor DebugColors::PaintTimeDisplayTextAndGraphColor() {
318  return SkColorSetRGB(75, 155, 55);
319}
320
321}  // namespace cc
322