summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-01 13:10:38 +0000
committeryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-01 13:10:38 +0000
commitd12aa932d3555eda2c011022e94df82023fa191d (patch)
treef1f9244b6beccfd2797d74fc1d1acea896d2a601
parent59d75c8166ae16a7879c11595fbde2ab1cffad3b (diff)
downloadchromium_src-d12aa932d3555eda2c011022e94df82023fa191d.zip
chromium_src-d12aa932d3555eda2c011022e94df82023fa191d.tar.gz
chromium_src-d12aa932d3555eda2c011022e94df82023fa191d.tar.bz2
Add builders for tracing event's structural arguments
The new classes allow building JSON-like structural arguments. Current implementation uses base::Value as backing store but that can be replaced in the future with something more efficient without changing client code. All clients of cc/debug/traced_value.h should eventually switch to use the new builders. BUG=361045 Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=286849 R=alph@chromium.org, dsinclair@chromium.org, nduca@chromium.org, willchan@chromium.org Review URL: https://codereview.chromium.org/380763002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@286984 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/BUILD.gn3
-rw-r--r--base/base.gyp1
-rw-r--r--base/base.gypi2
-rw-r--r--base/debug/trace_event_argument.cc117
-rw-r--r--base/debug/trace_event_argument.h59
-rw-r--r--base/debug/trace_event_argument_unittest.cc53
-rw-r--r--base/debug/trace_event_impl.h9
-rw-r--r--cc/base/math_util.cc74
-rw-r--r--cc/base/math_util.h39
-rw-r--r--cc/base/region.cc11
-rw-r--r--cc/base/region.h4
-rw-r--r--cc/debug/frame_viewer_instrumentation.h33
-rw-r--r--cc/debug/rendering_stats.cc60
-rw-r--r--cc/debug/rendering_stats.h4
-rw-r--r--cc/debug/rendering_stats_unittest.cc40
-rw-r--r--cc/debug/traced_picture.cc1
-rw-r--r--cc/debug/traced_value.cc47
-rw-r--r--cc/debug/traced_value.h50
-rw-r--r--cc/layers/heads_up_display_layer_impl.cc6
-rw-r--r--cc/layers/heads_up_display_layer_impl.h2
-rw-r--r--cc/layers/layer_impl.cc92
-rw-r--r--cc/layers/layer_impl.h6
-rw-r--r--cc/layers/picture_layer_impl.cc34
-rw-r--r--cc/layers/picture_layer_impl.h2
-rw-r--r--cc/layers/surface_layer_impl.cc3
-rw-r--r--cc/layers/surface_layer_impl.h2
-rw-r--r--cc/layers/tiled_layer_impl.cc7
-rw-r--r--cc/layers/tiled_layer_impl.h2
-rw-r--r--cc/output/begin_frame_args.cc14
-rw-r--r--cc/output/begin_frame_args.h11
-rw-r--r--cc/output/filter_operation.cc26
-rw-r--r--cc/output/filter_operation.h5
-rw-r--r--cc/output/filter_operations.cc16
-rw-r--r--cc/output/filter_operations.h6
-rw-r--r--cc/quads/checkerboard_draw_quad.cc3
-rw-r--r--cc/quads/checkerboard_draw_quad.h2
-rw-r--r--cc/quads/content_draw_quad_base.cc13
-rw-r--r--cc/quads/content_draw_quad_base.h2
-rw-r--r--cc/quads/debug_border_draw_quad.cc3
-rw-r--r--cc/quads/debug_border_draw_quad.h2
-rw-r--r--cc/quads/draw_quad.cc46
-rw-r--r--cc/quads/draw_quad.h7
-rw-r--r--cc/quads/io_surface_draw_quad.cc8
-rw-r--r--cc/quads/io_surface_draw_quad.h2
-rw-r--r--cc/quads/picture_draw_quad.cc7
-rw-r--r--cc/quads/picture_draw_quad.h2
-rw-r--r--cc/quads/render_pass.cc37
-rw-r--r--cc/quads/render_pass.h5
-rw-r--r--cc/quads/render_pass_draw_quad.cc25
-rw-r--r--cc/quads/render_pass_draw_quad.h2
-rw-r--r--cc/quads/shared_quad_state.cc33
-rw-r--r--cc/quads/shared_quad_state.h5
-rw-r--r--cc/quads/solid_color_draw_quad.cc3
-rw-r--r--cc/quads/solid_color_draw_quad.h2
-rw-r--r--cc/quads/stream_video_draw_quad.cc7
-rw-r--r--cc/quads/stream_video_draw_quad.h2
-rw-r--r--cc/quads/surface_draw_quad.cc3
-rw-r--r--cc/quads/surface_draw_quad.h2
-rw-r--r--cc/quads/texture_draw_quad.cc21
-rw-r--r--cc/quads/texture_draw_quad.h2
-rw-r--r--cc/quads/tile_draw_quad.cc3
-rw-r--r--cc/quads/tile_draw_quad.h2
-rw-r--r--cc/quads/yuv_video_draw_quad.cc7
-rw-r--r--cc/quads/yuv_video_draw_quad.h2
-rw-r--r--cc/resources/image_copy_raster_worker_pool.cc34
-rw-r--r--cc/resources/image_copy_raster_worker_pool.h11
-rw-r--r--cc/resources/image_raster_worker_pool.cc23
-rw-r--r--cc/resources/image_raster_worker_pool.h8
-rw-r--r--cc/resources/managed_tile_state.cc47
-rw-r--r--cc/resources/managed_tile_state.h2
-rw-r--r--cc/resources/picture.cc19
-rw-r--r--cc/resources/picture_layer_tiling.cc9
-rw-r--r--cc/resources/picture_layer_tiling.h8
-rw-r--r--cc/resources/picture_layer_tiling_set.cc11
-rw-r--r--cc/resources/picture_layer_tiling_set.h8
-rw-r--r--cc/resources/picture_pile_base.cc7
-rw-r--r--cc/resources/picture_pile_base.h5
-rw-r--r--cc/resources/pixel_buffer_raster_worker_pool.cc35
-rw-r--r--cc/resources/pixel_buffer_raster_worker_pool.h11
-rw-r--r--cc/resources/raster_mode.cc11
-rw-r--r--cc/resources/raster_mode.h4
-rw-r--r--cc/resources/tile.cc32
-rw-r--r--cc/resources/tile.h2
-rw-r--r--cc/resources/tile_manager.cc43
-rw-r--r--cc/resources/tile_manager.h17
-rw-r--r--cc/resources/tile_priority.cc87
-rw-r--r--cc/resources/tile_priority.h18
-rw-r--r--cc/scheduler/delay_based_time_source.cc33
-rw-r--r--cc/scheduler/delay_based_time_source.h9
-rw-r--r--cc/scheduler/scheduler.cc95
-rw-r--r--cc/scheduler/scheduler.h7
-rw-r--r--cc/scheduler/scheduler_settings.cc9
-rw-r--r--cc/scheduler/scheduler_settings.h10
-rw-r--r--cc/scheduler/scheduler_state_machine.cc173
-rw-r--r--cc/scheduler/scheduler_state_machine.h7
-rw-r--r--cc/scheduler/scheduler_state_machine_unittest.cc19
-rw-r--r--cc/scheduler/scheduler_unittest.cc31
-rw-r--r--cc/test/fake_proxy.cc4
-rw-r--r--cc/test/fake_proxy.h2
-rw-r--r--cc/trees/layer_tree_host.cc9
-rw-r--r--cc/trees/layer_tree_host.h2
-rw-r--r--cc/trees/layer_tree_host_impl.cc102
-rw-r--r--cc/trees/layer_tree_host_impl.h16
-rw-r--r--cc/trees/layer_tree_impl.cc20
-rw-r--r--cc/trees/layer_tree_impl.h8
-rw-r--r--cc/trees/proxy.cc4
-rw-r--r--cc/trees/proxy.h10
-rw-r--r--cc/trees/single_thread_proxy.cc21
-rw-r--r--cc/trees/single_thread_proxy.h2
-rw-r--r--cc/trees/thread_proxy.cc40
-rw-r--r--cc/trees/thread_proxy.h6
111 files changed, 1331 insertions, 861 deletions
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 72cf5be..9c3ef5b 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -154,6 +154,8 @@ component("base") {
"debug/stack_trace_win.cc",
"debug/trace_event.h",
"debug/trace_event_android.cc",
+ "debug/trace_event_argument.cc",
+ "debug/trace_event_argument.h",
"debug/trace_event_impl.cc",
"debug/trace_event_impl.h",
"debug/trace_event_impl_constants.cc",
@@ -1070,6 +1072,7 @@ test("base_unittests") {
"debug/leak_tracker_unittest.cc",
"debug/proc_maps_linux_unittest.cc",
"debug/stack_trace_unittest.cc",
+ "debug/trace_event_argument_unittest.cc",
"debug/trace_event_memory_unittest.cc",
"debug/trace_event_synthetic_delay_unittest.cc",
"debug/trace_event_system_stats_monitor_unittest.cc",
diff --git a/base/base.gyp b/base/base.gyp
index 988feee..f934b23 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -448,6 +448,7 @@
'debug/leak_tracker_unittest.cc',
'debug/proc_maps_linux_unittest.cc',
'debug/stack_trace_unittest.cc',
+ 'debug/trace_event_argument_unittest.cc',
'debug/trace_event_memory_unittest.cc',
'debug/trace_event_synthetic_delay_unittest.cc',
'debug/trace_event_system_stats_monitor_unittest.cc',
diff --git a/base/base.gypi b/base/base.gypi
index 079355e..d5eb0ca 100644
--- a/base/base.gypi
+++ b/base/base.gypi
@@ -160,6 +160,8 @@
'debug/stack_trace_win.cc',
'debug/trace_event.h',
'debug/trace_event_android.cc',
+ 'debug/trace_event_argument.cc',
+ 'debug/trace_event_argument.h',
'debug/trace_event_impl.cc',
'debug/trace_event_impl.h',
'debug/trace_event_impl_constants.cc',
diff --git a/base/debug/trace_event_argument.cc b/base/debug/trace_event_argument.cc
new file mode 100644
index 0000000..90e924f1
--- /dev/null
+++ b/base/debug/trace_event_argument.cc
@@ -0,0 +1,117 @@
+// Copyright (c) 2014 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 "base/debug/trace_event_argument.h"
+
+#include "base/json/json_writer.h"
+#include "base/values.h"
+
+namespace base {
+namespace debug {
+
+TracedValue::TracedValue() : root_(new DictionaryValue()) {
+ stack_.push_back(root_.get());
+}
+
+TracedValue::~TracedValue() {
+ DCHECK_EQ(1u, stack_.size());
+}
+
+void TracedValue::SetInteger(const char* name, int value) {
+ GetCurrentDictionary()->SetInteger(name, value);
+}
+
+void TracedValue::SetDouble(const char* name, double value) {
+ GetCurrentDictionary()->SetDouble(name, value);
+}
+
+void TracedValue::SetBoolean(const char* name, bool value) {
+ GetCurrentDictionary()->SetBoolean(name, value);
+}
+
+void TracedValue::SetString(const char* name, const std::string& value) {
+ GetCurrentDictionary()->SetString(name, value);
+}
+
+void TracedValue::SetValue(const char* name, Value* value) {
+ GetCurrentDictionary()->Set(name, value);
+}
+
+void TracedValue::BeginDictionary(const char* name) {
+ DictionaryValue* dictionary = new DictionaryValue();
+ GetCurrentDictionary()->Set(name, dictionary);
+ stack_.push_back(dictionary);
+}
+
+void TracedValue::BeginArray(const char* name) {
+ ListValue* array = new ListValue();
+ GetCurrentDictionary()->Set(name, array);
+ stack_.push_back(array);
+}
+
+void TracedValue::EndDictionary() {
+ DCHECK_GT(stack_.size(), 1u);
+ DCHECK(GetCurrentDictionary());
+ stack_.pop_back();
+}
+
+void TracedValue::AppendInteger(int value) {
+ GetCurrentArray()->AppendInteger(value);
+}
+
+void TracedValue::AppendDouble(double value) {
+ GetCurrentArray()->AppendDouble(value);
+}
+
+void TracedValue::AppendBoolean(bool value) {
+ GetCurrentArray()->AppendBoolean(value);
+}
+
+void TracedValue::AppendString(const std::string& value) {
+ GetCurrentArray()->AppendString(value);
+}
+
+void TracedValue::BeginArray() {
+ ListValue* array = new ListValue();
+ GetCurrentArray()->Append(array);
+ stack_.push_back(array);
+}
+
+void TracedValue::BeginDictionary() {
+ DictionaryValue* dictionary = new DictionaryValue();
+ GetCurrentArray()->Append(dictionary);
+ stack_.push_back(dictionary);
+}
+
+void TracedValue::EndArray() {
+ DCHECK_GT(stack_.size(), 1u);
+ DCHECK(GetCurrentArray());
+ stack_.pop_back();
+}
+
+DictionaryValue* TracedValue::GetCurrentDictionary() {
+ DCHECK(!stack_.empty());
+ DictionaryValue* dictionary = NULL;
+ stack_.back()->GetAsDictionary(&dictionary);
+ DCHECK(dictionary);
+ return dictionary;
+}
+
+ListValue* TracedValue::GetCurrentArray() {
+ DCHECK(!stack_.empty());
+ ListValue* list = NULL;
+ stack_.back()->GetAsList(&list);
+ DCHECK(list);
+ return list;
+}
+
+void TracedValue::AppendAsTraceFormat(std::string* out) const {
+ std::string tmp;
+ JSONWriter::Write(stack_.front(), &tmp);
+ *out += tmp;
+ DCHECK_EQ(1u, stack_.size()) << tmp;
+}
+
+} // namespace debug
+} // namespace base
diff --git a/base/debug/trace_event_argument.h b/base/debug/trace_event_argument.h
new file mode 100644
index 0000000..9d35358
--- /dev/null
+++ b/base/debug/trace_event_argument.h
@@ -0,0 +1,59 @@
+// Copyright 2014 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.
+
+#ifndef BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
+#define BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
+
+#include <string>
+#include <vector>
+
+#include "base/debug/trace_event.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace base {
+class DictionaryValue;
+class ListValue;
+class Value;
+
+namespace debug {
+
+class BASE_EXPORT TracedValue : public ConvertableToTraceFormat {
+ public:
+ TracedValue();
+
+ void EndDictionary();
+ void EndArray();
+
+ void SetInteger(const char* name, int value);
+ void SetDouble(const char* name, double);
+ void SetBoolean(const char* name, bool value);
+ void SetString(const char* name, const std::string& value);
+ void SetValue(const char* name, Value* value);
+ void BeginDictionary(const char* name);
+ void BeginArray(const char* name);
+
+ void AppendInteger(int);
+ void AppendDouble(double);
+ void AppendBoolean(bool);
+ void AppendString(const std::string&);
+ void BeginArray();
+ void BeginDictionary();
+
+ virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE;
+
+ private:
+ virtual ~TracedValue();
+
+ DictionaryValue* GetCurrentDictionary();
+ ListValue* GetCurrentArray();
+
+ scoped_ptr<base::Value> root_;
+ std::vector<Value*> stack_;
+ DISALLOW_COPY_AND_ASSIGN(TracedValue);
+};
+
+} // namespace debug
+} // namespace base
+
+#endif // BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
diff --git a/base/debug/trace_event_argument_unittest.cc b/base/debug/trace_event_argument_unittest.cc
new file mode 100644
index 0000000..06a7697
--- /dev/null
+++ b/base/debug/trace_event_argument_unittest.cc
@@ -0,0 +1,53 @@
+// Copyright (c) 2014 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 "base/debug/trace_event_argument.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace debug {
+
+TEST(TraceEventArgumentTest, FlatDictionary) {
+ scoped_refptr<TracedValue> value = new TracedValue();
+ value->SetInteger("int", 2014);
+ value->SetDouble("double", 0.0);
+ value->SetBoolean("bool", true);
+ value->SetString("string", "string");
+ std::string json;
+ value->AppendAsTraceFormat(&json);
+ EXPECT_EQ("{\"bool\":true,\"double\":0.0,\"int\":2014,\"string\":\"string\"}",
+ json);
+}
+
+TEST(TraceEventArgumentTest, Hierarchy) {
+ scoped_refptr<TracedValue> value = new TracedValue();
+ value->SetInteger("i0", 2014);
+ value->BeginDictionary("dict1");
+ value->SetInteger("i1", 2014);
+ value->BeginDictionary("dict2");
+ value->SetBoolean("b2", false);
+ value->EndDictionary();
+ value->SetString("s1", "foo");
+ value->EndDictionary();
+ value->SetDouble("d0", 0.0);
+ value->SetBoolean("b0", true);
+ value->BeginArray("a1");
+ value->AppendInteger(1);
+ value->AppendBoolean(true);
+ value->BeginDictionary();
+ value->SetInteger("i2", 3);
+ value->EndDictionary();
+ value->EndArray();
+ value->SetString("s0", "foo");
+ std::string json;
+ value->AppendAsTraceFormat(&json);
+ EXPECT_EQ(
+ "{\"a1\":[1,true,{\"i2\":3}],\"b0\":true,\"d0\":0.0,\"dict1\":{\"dict2\":"
+ "{\"b2\":false},\"i1\":2014,\"s1\":\"foo\"},\"i0\":2014,\"s0\":"
+ "\"foo\"}",
+ json);
+}
+
+} // namespace debug
+} // namespace base
diff --git a/base/debug/trace_event_impl.h b/base/debug/trace_event_impl.h
index 7b191b8..146ca8f 100644
--- a/base/debug/trace_event_impl.h
+++ b/base/debug/trace_event_impl.h
@@ -64,7 +64,8 @@ namespace debug {
// For any argument of type TRACE_VALUE_TYPE_CONVERTABLE the provided
// class must implement this interface.
-class ConvertableToTraceFormat : public RefCounted<ConvertableToTraceFormat> {
+class BASE_EXPORT ConvertableToTraceFormat
+ : public RefCounted<ConvertableToTraceFormat> {
public:
// Append the class info to the provided |out| string. The appended
// data must be a valid JSON object. Strings must be properly quoted, and
@@ -72,6 +73,12 @@ class ConvertableToTraceFormat : public RefCounted<ConvertableToTraceFormat> {
// appended.
virtual void AppendAsTraceFormat(std::string* out) const = 0;
+ std::string ToString() const {
+ std::string result;
+ AppendAsTraceFormat(&result);
+ return result;
+ }
+
protected:
virtual ~ConvertableToTraceFormat() {}
diff --git a/cc/base/math_util.cc b/cc/base/math_util.cc
index 07ad77b..fd8e796 100644
--- a/cc/base/math_util.cc
+++ b/cc/base/math_util.cc
@@ -8,6 +8,7 @@
#include <cmath>
#include <limits>
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "ui/gfx/quad_f.h"
#include "ui/gfx/rect.h"
@@ -547,13 +548,6 @@ scoped_ptr<base::Value> MathUtil::AsValue(const gfx::Size& s) {
return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::SizeF& s) {
- scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
- res->SetDouble("width", s.width());
- res->SetDouble("height", s.height());
- return res.PassAs<base::Value>();
-}
-
scoped_ptr<base::Value> MathUtil::AsValue(const gfx::Rect& r) {
scoped_ptr<base::ListValue> res(new base::ListValue());
res->AppendInteger(r.x());
@@ -591,23 +585,47 @@ scoped_ptr<base::Value> MathUtil::AsValue(const gfx::PointF& pt) {
return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::Point3F& pt) {
- scoped_ptr<base::ListValue> res(new base::ListValue());
+void MathUtil::AddToTracedValue(const gfx::Size& s,
+ base::debug::TracedValue* res) {
+ res->SetDouble("width", s.width());
+ res->SetDouble("height", s.height());
+}
+
+void MathUtil::AddToTracedValue(const gfx::SizeF& s,
+ base::debug::TracedValue* res) {
+ res->SetDouble("width", s.width());
+ res->SetDouble("height", s.height());
+}
+
+void MathUtil::AddToTracedValue(const gfx::Rect& r,
+ base::debug::TracedValue* res) {
+ res->AppendInteger(r.x());
+ res->AppendInteger(r.y());
+ res->AppendInteger(r.width());
+ res->AppendInteger(r.height());
+}
+
+void MathUtil::AddToTracedValue(const gfx::PointF& pt,
+ base::debug::TracedValue* res) {
+ res->AppendDouble(pt.x());
+ res->AppendDouble(pt.y());
+}
+
+void MathUtil::AddToTracedValue(const gfx::Point3F& pt,
+ base::debug::TracedValue* res) {
res->AppendDouble(pt.x());
res->AppendDouble(pt.y());
res->AppendDouble(pt.z());
- return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::Vector2d& v) {
- scoped_ptr<base::ListValue> res(new base::ListValue());
+void MathUtil::AddToTracedValue(const gfx::Vector2d& v,
+ base::debug::TracedValue* res) {
res->AppendInteger(v.x());
res->AppendInteger(v.y());
- return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::QuadF& q) {
- scoped_ptr<base::ListValue> res(new base::ListValue());
+void MathUtil::AddToTracedValue(const gfx::QuadF& q,
+ base::debug::TracedValue* res) {
res->AppendDouble(q.p1().x());
res->AppendDouble(q.p1().y());
res->AppendDouble(q.p2().x());
@@ -616,47 +634,41 @@ scoped_ptr<base::Value> MathUtil::AsValue(const gfx::QuadF& q) {
res->AppendDouble(q.p3().y());
res->AppendDouble(q.p4().x());
res->AppendDouble(q.p4().y());
- return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::RectF& rect) {
- scoped_ptr<base::ListValue> res(new base::ListValue());
+void MathUtil::AddToTracedValue(const gfx::RectF& rect,
+ base::debug::TracedValue* res) {
res->AppendDouble(rect.x());
res->AppendDouble(rect.y());
res->AppendDouble(rect.width());
res->AppendDouble(rect.height());
- return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::Transform& transform) {
- scoped_ptr<base::ListValue> res(new base::ListValue());
+void MathUtil::AddToTracedValue(const gfx::Transform& transform,
+ base::debug::TracedValue* res) {
const SkMatrix44& m = transform.matrix();
for (int row = 0; row < 4; ++row) {
for (int col = 0; col < 4; ++col)
res->AppendDouble(m.getDouble(row, col));
}
- return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValue(const gfx::BoxF& box) {
- scoped_ptr<base::ListValue> res(new base::ListValue());
+void MathUtil::AddToTracedValue(const gfx::BoxF& box,
+ base::debug::TracedValue* res) {
res->AppendInteger(box.x());
res->AppendInteger(box.y());
res->AppendInteger(box.z());
res->AppendInteger(box.width());
res->AppendInteger(box.height());
res->AppendInteger(box.depth());
- return res.PassAs<base::Value>();
}
-scoped_ptr<base::Value> MathUtil::AsValueSafely(double value) {
- return scoped_ptr<base::Value>(new base::FundamentalValue(
- std::min(value, std::numeric_limits<double>::max())));
+double MathUtil::AsDoubleSafely(double value) {
+ return std::min(value, std::numeric_limits<double>::max());
}
-scoped_ptr<base::Value> MathUtil::AsValueSafely(float value) {
- return scoped_ptr<base::Value>(new base::FundamentalValue(
- std::min(value, std::numeric_limits<float>::max())));
+float MathUtil::AsFloatSafely(float value) {
+ return std::min(value, std::numeric_limits<float>::max());
}
} // namespace cc
diff --git a/cc/base/math_util.h b/cc/base/math_util.h
index 3af2102..4301add 100644
--- a/cc/base/math_util.h
+++ b/cc/base/math_util.h
@@ -17,7 +17,12 @@
#include "ui/gfx/size.h"
#include "ui/gfx/transform.h"
-namespace base { class Value; }
+namespace base {
+class Value;
+namespace debug {
+class TracedValue;
+}
+}
namespace gfx {
class QuadF;
@@ -174,21 +179,35 @@ class CC_EXPORT MathUtil {
// Conversion to value.
static scoped_ptr<base::Value> AsValue(const gfx::Size& s);
- static scoped_ptr<base::Value> AsValue(const gfx::SizeF& s);
static scoped_ptr<base::Value> AsValue(const gfx::Rect& r);
static bool FromValue(const base::Value*, gfx::Rect* out_rect);
static scoped_ptr<base::Value> AsValue(const gfx::PointF& q);
- static scoped_ptr<base::Value> AsValue(const gfx::Point3F&);
- static scoped_ptr<base::Value> AsValue(const gfx::Vector2d& v);
- static scoped_ptr<base::Value> AsValue(const gfx::QuadF& q);
- static scoped_ptr<base::Value> AsValue(const gfx::RectF& rect);
- static scoped_ptr<base::Value> AsValue(const gfx::Transform& transform);
- static scoped_ptr<base::Value> AsValue(const gfx::BoxF& box);
+
+ static void AddToTracedValue(const gfx::Size& s,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::SizeF& s,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::Rect& r,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::PointF& q,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::Point3F&,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::Vector2d& v,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::QuadF& q,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::RectF& rect,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::Transform& transform,
+ base::debug::TracedValue* res);
+ static void AddToTracedValue(const gfx::BoxF& box,
+ base::debug::TracedValue* res);
// Returns a base::Value representation of the floating point value.
// If the value is inf, returns max double/float representation.
- static scoped_ptr<base::Value> AsValueSafely(double value);
- static scoped_ptr<base::Value> AsValueSafely(float value);
+ static double AsDoubleSafely(double value);
+ static float AsFloatSafely(float value);
};
} // namespace cc
diff --git a/cc/base/region.cc b/cc/base/region.cc
index 906bc6e..79c30ec 100644
--- a/cc/base/region.cc
+++ b/cc/base/region.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "cc/base/region.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
namespace cc {
@@ -120,6 +121,16 @@ scoped_ptr<base::Value> Region::AsValue() const {
return result.PassAs<base::Value>();
}
+void Region::AsValueInto(base::debug::TracedValue* result) const {
+ for (Iterator it(*this); it.has_rect(); it.next()) {
+ gfx::Rect rect(it.rect());
+ result->AppendInteger(rect.x());
+ result->AppendInteger(rect.y());
+ result->AppendInteger(rect.width());
+ result->AppendInteger(rect.height());
+ }
+}
+
Region::Iterator::Iterator() {
}
diff --git a/cc/base/region.h b/cc/base/region.h
index 06fe731..3ef32db 100644
--- a/cc/base/region.h
+++ b/cc/base/region.h
@@ -16,6 +16,9 @@
namespace base {
class Value;
+namespace debug {
+class TracedValue;
+}
}
namespace cc {
@@ -59,6 +62,7 @@ class CC_EXPORT Region {
std::string ToString() const;
scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* array) const;
class CC_EXPORT Iterator {
public:
diff --git a/cc/debug/frame_viewer_instrumentation.h b/cc/debug/frame_viewer_instrumentation.h
index 16cf433..7d97b52e 100644
--- a/cc/debug/frame_viewer_instrumentation.h
+++ b/cc/debug/frame_viewer_instrumentation.h
@@ -23,17 +23,18 @@ const char kRasterMode[] = "rasterMode";
const char kAnalyzeTask[] = "AnalyzeTask";
const char kRasterTask[] = "RasterTask";
-scoped_ptr<base::Value> TileDataAsValue(const void* tile_id,
- TileResolution tile_resolution,
- int source_frame_number,
- int layer_id) {
- scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue);
- res->Set(internal::kTileId, TracedValue::CreateIDRef(tile_id).release());
- res->Set(internal::kTileResolution,
- TileResolutionAsValue(tile_resolution).release());
+scoped_refptr<base::debug::ConvertableToTraceFormat> TileDataAsValue(
+ const void* tile_id,
+ TileResolution tile_resolution,
+ int source_frame_number,
+ int layer_id) {
+ scoped_refptr<base::debug::TracedValue> res(new base::debug::TracedValue());
+ TracedValue::SetIDRef(tile_id, res, internal::kTileId);
+ res->SetString(internal::kTileResolution,
+ TileResolutionToString(tile_resolution));
res->SetInteger(internal::kSourceFrameNumber, source_frame_number);
res->SetInteger(internal::kLayerId, layer_id);
- return res.PassAs<base::Value>();
+ return res;
}
} // namespace internal
@@ -48,10 +49,8 @@ class ScopedAnalyzeTask {
internal::kCategory,
internal::kAnalyzeTask,
internal::kTileData,
- TracedValue::FromValue(internal::TileDataAsValue(tile_id,
- tile_resolution,
- source_frame_number,
- layer_id).release()));
+ internal::TileDataAsValue(
+ tile_id, tile_resolution, source_frame_number, layer_id));
}
~ScopedAnalyzeTask() {
TRACE_EVENT_END0(internal::kCategory, internal::kAnalyzeTask);
@@ -72,12 +71,10 @@ class ScopedRasterTask {
internal::kCategory,
internal::kRasterTask,
internal::kTileData,
- TracedValue::FromValue(internal::TileDataAsValue(tile_id,
- tile_resolution,
- source_frame_number,
- layer_id).release()),
+ internal::TileDataAsValue(
+ tile_id, tile_resolution, source_frame_number, layer_id),
internal::kRasterMode,
- TracedValue::FromValue(RasterModeAsValue(raster_mode).release()));
+ RasterModeToString(raster_mode));
}
~ScopedRasterTask() {
TRACE_EVENT_END0(internal::kCategory, internal::kRasterTask);
diff --git a/cc/debug/rendering_stats.cc b/cc/debug/rendering_stats.cc
index 47bc7c7..b5989fc 100644
--- a/cc/debug/rendering_stats.cc
+++ b/cc/debug/rendering_stats.cc
@@ -16,14 +16,12 @@ void RenderingStats::TimeDeltaList::Append(base::TimeDelta value) {
values.push_back(value);
}
-scoped_ptr<base::ListValue>
-RenderingStats::TimeDeltaList::AsListValueInMilliseconds() const {
- scoped_ptr<base::ListValue> list_value(new base::ListValue);
+void RenderingStats::TimeDeltaList::AddToTracedValue(
+ base::debug::TracedValue* list_value) const {
std::list<base::TimeDelta>::const_iterator iter;
for (iter = values.begin(); iter != values.end(); ++iter) {
list_value->AppendDouble(iter->InMillisecondsF());
}
- return list_value.Pass();
}
void RenderingStats::TimeDeltaList::Add(const TimeDeltaList& other) {
@@ -39,13 +37,14 @@ RenderingStats::MainThreadRenderingStats::~MainThreadRenderingStats() {
scoped_refptr<base::debug::ConvertableToTraceFormat>
RenderingStats::MainThreadRenderingStats::AsTraceableData() const {
- scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue());
+ scoped_refptr<base::debug::TracedValue> record_data =
+ new base::debug::TracedValue();
record_data->SetInteger("frame_count", frame_count);
record_data->SetDouble("paint_time", paint_time.InSecondsF());
record_data->SetInteger("painted_pixel_count", painted_pixel_count);
record_data->SetDouble("record_time", record_time.InSecondsF());
record_data->SetInteger("recorded_pixel_count", recorded_pixel_count);
- return TracedValue::FromValue(record_data.release());
+ return record_data;
}
void RenderingStats::MainThreadRenderingStats::Add(
@@ -69,34 +68,39 @@ RenderingStats::ImplThreadRenderingStats::~ImplThreadRenderingStats() {
scoped_refptr<base::debug::ConvertableToTraceFormat>
RenderingStats::ImplThreadRenderingStats::AsTraceableData() const {
- scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue());
+ scoped_refptr<base::debug::TracedValue> record_data =
+ new base::debug::TracedValue();
record_data->SetInteger("frame_count", frame_count);
record_data->SetDouble("rasterize_time", rasterize_time.InSecondsF());
record_data->SetInteger("rasterized_pixel_count", rasterized_pixel_count);
record_data->SetInteger("visible_content_area", visible_content_area);
record_data->SetInteger("approximated_visible_content_area",
approximated_visible_content_area);
- record_data->Set("draw_duration_ms",
- draw_duration.AsListValueInMilliseconds().release());
- record_data->Set(
- "draw_duration_estimate_ms",
- draw_duration_estimate.AsListValueInMilliseconds().release());
- record_data->Set(
- "begin_main_frame_to_commit_duration_ms",
- begin_main_frame_to_commit_duration.AsListValueInMilliseconds()
- .release());
- record_data->Set(
- "begin_main_frame_to_commit_duration_estimate_ms",
- begin_main_frame_to_commit_duration_estimate.AsListValueInMilliseconds()
- .release());
- record_data->Set(
- "commit_to_activate_duration_ms",
- commit_to_activate_duration.AsListValueInMilliseconds().release());
- record_data->Set(
- "commit_to_activate_duration_estimate_ms",
- commit_to_activate_duration_estimate.AsListValueInMilliseconds()
- .release());
- return TracedValue::FromValue(record_data.release());
+ record_data->BeginArray("draw_duration_ms");
+ draw_duration.AddToTracedValue(record_data.get());
+ record_data->EndArray();
+
+ record_data->BeginArray("draw_duration_estimate_ms");
+ draw_duration_estimate.AddToTracedValue(record_data.get());
+ record_data->EndArray();
+
+ record_data->BeginArray("begin_main_frame_to_commit_duration_ms");
+ begin_main_frame_to_commit_duration.AddToTracedValue(record_data.get());
+ record_data->EndArray();
+
+ record_data->BeginArray("begin_main_frame_to_commit_duration_estimate_ms");
+ begin_main_frame_to_commit_duration_estimate.AddToTracedValue(
+ record_data.get());
+ record_data->EndArray();
+
+ record_data->BeginArray("commit_to_activate_duration_ms");
+ commit_to_activate_duration.AddToTracedValue(record_data.get());
+ record_data->EndArray();
+
+ record_data->BeginArray("commit_to_activate_duration_estimate_ms");
+ commit_to_activate_duration_estimate.AddToTracedValue(record_data.get());
+ record_data->EndArray();
+ return record_data;
}
void RenderingStats::ImplThreadRenderingStats::Add(
diff --git a/cc/debug/rendering_stats.h b/cc/debug/rendering_stats.h
index a6edff1..73ca9c4 100644
--- a/cc/debug/rendering_stats.h
+++ b/cc/debug/rendering_stats.h
@@ -8,6 +8,7 @@
#include <list>
#include "base/basictypes.h"
+#include "base/debug/trace_event_argument.h"
#include "base/time/time.h"
#include "base/values.h"
#include "cc/base/cc_export.h"
@@ -23,7 +24,8 @@ struct CC_EXPORT RenderingStats {
~TimeDeltaList();
void Append(base::TimeDelta value);
- scoped_ptr<base::ListValue> AsListValueInMilliseconds() const;
+ void AddToTracedValue(base::debug::TracedValue* list_value) const;
+
void Add(const TimeDeltaList& other);
private:
diff --git a/cc/debug/rendering_stats_unittest.cc b/cc/debug/rendering_stats_unittest.cc
index ea0276c..a634093 100644
--- a/cc/debug/rendering_stats_unittest.cc
+++ b/cc/debug/rendering_stats_unittest.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <string>
+
#include "base/time/time.h"
#include "base/values.h"
#include "cc/debug/rendering_stats.h"
@@ -10,20 +12,18 @@
namespace cc {
namespace {
-void CompareDoubleValue(const base::ListValue& list_value,
- int index,
- double expected_value) {
- double value;
- EXPECT_TRUE(list_value.GetDouble(index, &value));
- EXPECT_EQ(expected_value, value);
+static std::string ToString(const RenderingStats::TimeDeltaList& list) {
+ scoped_refptr<base::debug::TracedValue> value =
+ new base::debug::TracedValue();
+ value->BeginArray("list_value");
+ list.AddToTracedValue(value.get());
+ value->EndArray();
+ return value->ToString();
}
TEST(RenderingStatsTest, TimeDeltaListEmpty) {
RenderingStats::TimeDeltaList time_delta_list;
- scoped_ptr<base::ListValue> list_value =
- time_delta_list.AsListValueInMilliseconds();
- EXPECT_TRUE(list_value->empty());
- EXPECT_EQ(0ul, list_value->GetSize());
+ EXPECT_EQ("{\"list_value\":[]}", ToString(time_delta_list));
}
TEST(RenderingStatsTest, TimeDeltaListNonEmpty) {
@@ -31,13 +31,7 @@ TEST(RenderingStatsTest, TimeDeltaListNonEmpty) {
time_delta_list.Append(base::TimeDelta::FromMilliseconds(234));
time_delta_list.Append(base::TimeDelta::FromMilliseconds(827));
- scoped_ptr<base::ListValue> list_value =
- time_delta_list.AsListValueInMilliseconds();
- EXPECT_FALSE(list_value->empty());
- EXPECT_EQ(2ul, list_value->GetSize());
-
- CompareDoubleValue(*list_value.get(), 0, 234);
- CompareDoubleValue(*list_value.get(), 1, 827);
+ EXPECT_EQ("{\"list_value\":[234.0,827.0]}", ToString(time_delta_list));
}
TEST(RenderingStatsTest, TimeDeltaListAdd) {
@@ -51,16 +45,8 @@ TEST(RenderingStatsTest, TimeDeltaListAdd) {
time_delta_list_b.Append(base::TimeDelta::FromMilliseconds(2));
time_delta_list_a.Add(time_delta_list_b);
- scoped_ptr<base::ListValue> list_value =
- time_delta_list_a.AsListValueInMilliseconds();
- EXPECT_FALSE(list_value->empty());
- EXPECT_EQ(5ul, list_value->GetSize());
-
- CompareDoubleValue(*list_value.get(), 0, 810);
- CompareDoubleValue(*list_value.get(), 1, 32);
- CompareDoubleValue(*list_value.get(), 2, 43);
- CompareDoubleValue(*list_value.get(), 3, 938);
- CompareDoubleValue(*list_value.get(), 4, 2);
+ EXPECT_EQ("{\"list_value\":[810.0,32.0,43.0,938.0,2.0]}",
+ ToString(time_delta_list_a));
}
} // namespace
diff --git a/cc/debug/traced_picture.cc b/cc/debug/traced_picture.cc
index 89d988f..2db5492 100644
--- a/cc/debug/traced_picture.cc
+++ b/cc/debug/traced_picture.cc
@@ -7,7 +7,6 @@
#include "base/json/json_writer.h"
#include "base/strings/stringprintf.h"
#include "base/values.h"
-#include "cc/debug/traced_value.h"
namespace cc {
diff --git a/cc/debug/traced_value.cc b/cc/debug/traced_value.cc
index 3b506ae..5828cb8 100644
--- a/cc/debug/traced_value.cc
+++ b/cc/debug/traced_value.cc
@@ -4,26 +4,34 @@
#include "cc/debug/traced_value.h"
-#include "base/json/json_writer.h"
+#include "base/debug/trace_event_argument.h"
#include "base/strings/stringprintf.h"
-#include "base/values.h"
namespace cc {
-scoped_ptr<base::Value> TracedValue::CreateIDRef(const void* id) {
- scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
- res->SetString("id_ref", base::StringPrintf("%p", id));
- return res.PassAs<base::Value>();
+void TracedValue::AppendIDRef(const void* id, base::debug::TracedValue* state) {
+ state->BeginDictionary();
+ state->SetString("id_ref", base::StringPrintf("%p", id));
+ state->EndDictionary();
}
-void TracedValue::MakeDictIntoImplicitSnapshot(
- base::DictionaryValue* dict, const char* object_name, const void* id) {
+void TracedValue::SetIDRef(const void* id,
+ base::debug::TracedValue* state,
+ const char* name) {
+ state->BeginDictionary(name);
+ state->SetString("id_ref", base::StringPrintf("%p", id));
+ state->EndDictionary();
+}
+
+void TracedValue::MakeDictIntoImplicitSnapshot(base::debug::TracedValue* dict,
+ const char* object_name,
+ const void* id) {
dict->SetString("id", base::StringPrintf("%s/%p", object_name, id));
}
void TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
const char* category,
- base::DictionaryValue* dict,
+ base::debug::TracedValue* dict,
const char* object_name,
const void* id) {
dict->SetString("cat", category);
@@ -32,7 +40,7 @@ void TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
void TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
const char* category,
- base::DictionaryValue* dict,
+ base::debug::TracedValue* dict,
const char* object_base_type_name,
const char* object_name,
const void* id) {
@@ -41,23 +49,4 @@ void TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
MakeDictIntoImplicitSnapshot(dict, object_name, id);
}
-scoped_refptr<base::debug::ConvertableToTraceFormat> TracedValue::FromValue(
- base::Value* value) {
- return scoped_refptr<base::debug::ConvertableToTraceFormat>(
- new TracedValue(value));
-}
-
-TracedValue::TracedValue(base::Value* value)
- : value_(value) {
-}
-
-TracedValue::~TracedValue() {
-}
-
-void TracedValue::AppendAsTraceFormat(std::string* out) const {
- std::string tmp;
- base::JSONWriter::Write(value_.get(), &tmp);
- *out += tmp;
-}
-
} // namespace cc
diff --git a/cc/debug/traced_value.h b/cc/debug/traced_value.h
index 560eaf8..c5ea30a 100644
--- a/cc/debug/traced_value.h
+++ b/cc/debug/traced_value.h
@@ -5,58 +5,36 @@
#ifndef CC_DEBUG_TRACED_VALUE_H_
#define CC_DEBUG_TRACED_VALUE_H_
-#include <string>
-
-#include "base/debug/trace_event.h"
-#include "base/memory/scoped_ptr.h"
-
namespace base {
-class DictionaryValue;
-class Value;
+namespace debug {
+class TracedValue;
+}
}
+
namespace cc {
-class TracedValue : public base::debug::ConvertableToTraceFormat {
+class TracedValue {
public:
- static scoped_ptr<base::Value> CreateIDRef(const void* id);
- static void MakeDictIntoImplicitSnapshot(
- base::DictionaryValue* dict, const char* object_name, const void* id);
+ static void AppendIDRef(const void* id, base::debug::TracedValue* array);
+ static void SetIDRef(const void* id,
+ base::debug::TracedValue* dict,
+ const char* name);
+ static void MakeDictIntoImplicitSnapshot(base::debug::TracedValue* dict,
+ const char* object_name,
+ const void* id);
static void MakeDictIntoImplicitSnapshotWithCategory(
const char* category,
- base::DictionaryValue* dict,
+ base::debug::TracedValue* dict,
const char* object_name,
const void* id);
static void MakeDictIntoImplicitSnapshotWithCategory(
const char* category,
- base::DictionaryValue* dict,
+ base::debug::TracedValue* dict,
const char* object_base_type_name,
const char* object_name,
const void* id);
- static scoped_refptr<base::debug::ConvertableToTraceFormat> FromValue(
- base::Value* value);
-
- virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE;
-
- private:
- explicit TracedValue(base::Value* value);
- virtual ~TracedValue();
-
- scoped_ptr<base::Value> value_;
-
- DISALLOW_COPY_AND_ASSIGN(TracedValue);
};
-template <class T>
-static scoped_refptr<base::debug::ConvertableToTraceFormat> ToTrace(T* t) {
- return TracedValue::FromValue(t->AsValue().release());
-}
-
-template <class T>
-static scoped_refptr<base::debug::ConvertableToTraceFormat> ToTrace(
- const T& t) {
- return ToTrace(&t);
-}
-
} // namespace cc
#endif // CC_DEBUG_TRACED_VALUE_H_
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index c031bd4..0ccd4ed 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -7,11 +7,12 @@
#include <algorithm>
#include <vector>
+#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/strings/stringprintf.h"
#include "cc/debug/debug_colors.h"
#include "cc/debug/frame_rate_counter.h"
#include "cc/debug/paint_time_counter.h"
-#include "cc/debug/traced_value.h"
#include "cc/output/renderer.h"
#include "cc/quads/texture_draw_quad.h"
#include "cc/resources/memory_history.h"
@@ -761,7 +762,8 @@ const char* HeadsUpDisplayLayerImpl::LayerTypeAsString() const {
return "cc::HeadsUpDisplayLayerImpl";
}
-void HeadsUpDisplayLayerImpl::AsValueInto(base::DictionaryValue* dict) const {
+void HeadsUpDisplayLayerImpl::AsValueInto(
+ base::debug::TracedValue* dict) const {
LayerImpl::AsValueInto(dict);
dict->SetString("layer_name", "Heads Up Display Layer");
}
diff --git a/cc/layers/heads_up_display_layer_impl.h b/cc/layers/heads_up_display_layer_impl.h
index b5fa355..8ee386c 100644
--- a/cc/layers/heads_up_display_layer_impl.h
+++ b/cc/layers/heads_up_display_layer_impl.h
@@ -72,7 +72,7 @@ class CC_EXPORT HeadsUpDisplayLayerImpl : public LayerImpl {
virtual const char* LayerTypeAsString() const OVERRIDE;
- virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
void UpdateHudContents();
void DrawHudContents(SkCanvas* canvas);
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index 7a23e66..bd9a2d7 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -5,6 +5,7 @@
#include "cc/layers/layer_impl.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/json/json_reader.h"
#include "base/strings/stringprintf.h"
#include "cc/animation/animation_registrar.h"
@@ -1390,7 +1391,7 @@ void LayerImpl::RemoveDependentNeedsPushProperties() {
parent_->RemoveDependentNeedsPushProperties();
}
-void LayerImpl::AsValueInto(base::DictionaryValue* state) const {
+void LayerImpl::AsValueInto(base::debug::TracedValue* state) const {
TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
TRACE_DISABLED_BY_DEFAULT("cc.debug"),
state,
@@ -1398,50 +1399,75 @@ void LayerImpl::AsValueInto(base::DictionaryValue* state) const {
LayerTypeAsString(),
this);
state->SetInteger("layer_id", id());
- state->Set("bounds", MathUtil::AsValue(bounds_).release());
- state->Set("position", MathUtil::AsValue(position_).release());
+ state->BeginDictionary("bounds");
+ MathUtil::AddToTracedValue(bounds_, state);
+ state->EndDictionary();
+
+ state->BeginArray("position");
+ MathUtil::AddToTracedValue(position_, state);
+ state->EndArray();
+
state->SetInteger("draws_content", DrawsContent());
state->SetInteger("gpu_memory_usage", GPUMemoryUsageInBytes());
- state->Set("scroll_offset", MathUtil::AsValue(scroll_offset_).release());
- state->Set("transform_origin",
- MathUtil::AsValue(transform_origin_).release());
+
+ state->BeginArray("scroll_offset");
+ MathUtil::AddToTracedValue(scroll_offset_, state);
+ state->EndArray();
+
+ state->BeginArray("transform_origin");
+ MathUtil::AddToTracedValue(transform_origin_, state);
+ state->EndArray();
bool clipped;
gfx::QuadF layer_quad = MathUtil::MapQuad(
screen_space_transform(),
gfx::QuadF(gfx::Rect(content_bounds())),
&clipped);
- state->Set("layer_quad", MathUtil::AsValue(layer_quad).release());
-
+ state->BeginArray("layer_quad");
+ MathUtil::AddToTracedValue(layer_quad, state);
+ state->EndArray();
if (!touch_event_handler_region_.IsEmpty()) {
- state->Set("touch_event_handler_region",
- touch_event_handler_region_.AsValue().release());
+ state->BeginArray("touch_event_handler_region");
+ touch_event_handler_region_.AsValueInto(state);
+ state->EndArray();
}
if (have_wheel_event_handlers_) {
gfx::Rect wheel_rect(content_bounds());
Region wheel_region(wheel_rect);
- state->Set("wheel_event_handler_region",
- wheel_region.AsValue().release());
+ state->BeginArray("wheel_event_handler_region");
+ wheel_region.AsValueInto(state);
+ state->EndArray();
}
if (have_scroll_event_handlers_) {
gfx::Rect scroll_rect(content_bounds());
Region scroll_region(scroll_rect);
- state->Set("scroll_event_handler_region",
- scroll_region.AsValue().release());
+ state->BeginArray("scroll_event_handler_region");
+ scroll_region.AsValueInto(state);
+ state->EndArray();
}
if (!non_fast_scrollable_region_.IsEmpty()) {
- state->Set("non_fast_scrollable_region",
- non_fast_scrollable_region_.AsValue().release());
+ state->BeginArray("non_fast_scrollable_region");
+ non_fast_scrollable_region_.AsValueInto(state);
+ state->EndArray();
}
- scoped_ptr<base::ListValue> children_list(new base::ListValue());
- for (size_t i = 0; i < children_.size(); ++i)
- children_list->Append(children_[i]->AsValue().release());
- state->Set("children", children_list.release());
- if (mask_layer_)
- state->Set("mask_layer", mask_layer_->AsValue().release());
- if (replica_layer_)
- state->Set("replica_layer", replica_layer_->AsValue().release());
+ state->BeginArray("children");
+ for (size_t i = 0; i < children_.size(); ++i) {
+ state->BeginDictionary();
+ children_[i]->AsValueInto(state);
+ state->EndDictionary();
+ }
+ state->EndArray();
+ if (mask_layer_) {
+ state->BeginDictionary("mask_layer");
+ mask_layer_->AsValueInto(state);
+ state->EndDictionary();
+ }
+ if (replica_layer_) {
+ state->BeginDictionary("replica_layer");
+ replica_layer_->AsValueInto(state);
+ state->EndDictionary();
+ }
if (scroll_parent_)
state->SetInteger("scroll_parent", scroll_parent_->id());
@@ -1457,8 +1483,11 @@ void LayerImpl::AsValueInto(base::DictionaryValue* state) const {
layer_animation_controller()->HasAnimationThatInflatesBounds());
gfx::BoxF box;
- if (LayerUtils::GetAnimationBounds(*this, &box))
- state->Set("animation_bounds", MathUtil::AsValue(box).release());
+ if (LayerUtils::GetAnimationBounds(*this, &box)) {
+ state->BeginArray("animation_bounds");
+ MathUtil::AddToTracedValue(box, state);
+ state->EndArray();
+ }
if (debug_info_.get()) {
std::string str;
@@ -1471,7 +1500,10 @@ void LayerImpl::AsValueInto(base::DictionaryValue* state) const {
bool converted_to_dictionary =
debug_info_value->GetAsDictionary(&dictionary_value);
DCHECK(converted_to_dictionary);
- state->MergeDictionary(dictionary_value);
+ for (base::DictionaryValue::Iterator it(*dictionary_value); !it.IsAtEnd();
+ it.Advance()) {
+ state->SetValue(it.key().data(), it.value().DeepCopy());
+ }
} else {
NOTREACHED();
}
@@ -1485,12 +1517,6 @@ bool LayerImpl::IsDrawnRenderSurfaceLayerListMember() const {
size_t LayerImpl::GPUMemoryUsageInBytes() const { return 0; }
-scoped_ptr<base::Value> LayerImpl::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- AsValueInto(state.get());
- return state.PassAs<base::Value>();
-}
-
void LayerImpl::RunMicroBenchmark(MicroBenchmarkImpl* benchmark) {
benchmark->RunOnLayer(this);
}
diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h
index 979d2e0..c1ce9df 100644
--- a/cc/layers/layer_impl.h
+++ b/cc/layers/layer_impl.h
@@ -39,6 +39,7 @@
namespace base {
namespace debug {
class ConvertableToTraceFormat;
+class TracedValue;
}
class DictionaryValue;
@@ -521,7 +522,8 @@ class CC_EXPORT LayerImpl : public LayerAnimationValueObserver,
virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl);
virtual void PushPropertiesTo(LayerImpl* layer);
- scoped_ptr<base::Value> AsValue() const;
+ virtual void AsValueInto(base::debug::TracedValue* dict) const;
+
virtual size_t GPUMemoryUsageInBytes() const;
void SetNeedsPushProperties();
@@ -563,8 +565,6 @@ class CC_EXPORT LayerImpl : public LayerAnimationValueObserver,
SkColor color,
float width) const;
- virtual void AsValueInto(base::DictionaryValue* dict) const;
-
void NoteLayerPropertyChanged();
void NoteLayerPropertyChangedForSubtree();
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 2544c0d..dcbcc74 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <limits>
+#include "base/debug/trace_event_argument.h"
#include "base/time/time.h"
#include "cc/base/math_util.h"
#include "cc/base/util.h"
@@ -1335,31 +1336,42 @@ void PictureLayerImpl::GetDebugBorderProperties(
*width = DebugColors::TiledContentLayerBorderWidth(layer_tree_impl());
}
-void PictureLayerImpl::AsValueInto(base::DictionaryValue* state) const {
+void PictureLayerImpl::AsValueInto(base::debug::TracedValue* state) const {
const_cast<PictureLayerImpl*>(this)->DoPostCommitInitializationIfNeeded();
LayerImpl::AsValueInto(state);
state->SetDouble("ideal_contents_scale", ideal_contents_scale_);
state->SetDouble("geometry_contents_scale", MaximumTilingContentsScale());
- state->Set("tilings", tilings_->AsValue().release());
- state->Set("pictures", pile_->AsValue().release());
- state->Set("invalidation", invalidation_.AsValue().release());
+ state->BeginArray("tilings");
+ tilings_->AsValueInto(state);
+ state->EndArray();
- scoped_ptr<base::ListValue> coverage_tiles(new base::ListValue);
+ state->BeginArray("pictures");
+ pile_->AsValueInto(state);
+ state->EndArray();
+
+ state->BeginArray("invalidation");
+ invalidation_.AsValueInto(state);
+ state->EndArray();
+
+ state->BeginArray("coverage_tiles");
for (PictureLayerTilingSet::CoverageIterator iter(tilings_.get(),
contents_scale_x(),
gfx::Rect(content_bounds()),
ideal_contents_scale_);
iter;
++iter) {
- scoped_ptr<base::DictionaryValue> tile_data(new base::DictionaryValue);
- tile_data->Set("geometry_rect",
- MathUtil::AsValue(iter.geometry_rect()).release());
+ state->BeginDictionary();
+
+ state->BeginArray("geometry_rect");
+ MathUtil::AddToTracedValue(iter.geometry_rect(), state);
+ state->EndArray();
+
if (*iter)
- tile_data->Set("tile", TracedValue::CreateIDRef(*iter).release());
+ TracedValue::SetIDRef(*iter, state, "tile");
- coverage_tiles->Append(tile_data.release());
+ state->EndDictionary();
}
- state->Set("coverage_tiles", coverage_tiles.release());
+ state->EndArray();
}
size_t PictureLayerImpl::GPUMemoryUsageInBytes() const {
diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h
index fcf92fe..ff36c15 100644
--- a/cc/layers/picture_layer_impl.h
+++ b/cc/layers/picture_layer_impl.h
@@ -180,7 +180,7 @@ class CC_EXPORT PictureLayerImpl
virtual void GetDebugBorderProperties(
SkColor* color, float* width) const OVERRIDE;
- virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
virtual void UpdateIdealScales();
float MaximumTilingContentsScale() const;
diff --git a/cc/layers/surface_layer_impl.cc b/cc/layers/surface_layer_impl.cc
index 80c6da0..fb0d2a9 100644
--- a/cc/layers/surface_layer_impl.cc
+++ b/cc/layers/surface_layer_impl.cc
@@ -4,6 +4,7 @@
#include "cc/layers/surface_layer_impl.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/debug/debug_colors.h"
#include "cc/quads/surface_draw_quad.h"
#include "cc/trees/occlusion_tracker.h"
@@ -66,7 +67,7 @@ void SurfaceLayerImpl::GetDebugBorderProperties(SkColor* color,
*width = DebugColors::SurfaceLayerBorderWidth(layer_tree_impl());
}
-void SurfaceLayerImpl::AsValueInto(base::DictionaryValue* dict) const {
+void SurfaceLayerImpl::AsValueInto(base::debug::TracedValue* dict) const {
LayerImpl::AsValueInto(dict);
dict->SetInteger("surface_id", surface_id_.id);
}
diff --git a/cc/layers/surface_layer_impl.h b/cc/layers/surface_layer_impl.h
index 65120aa..712ea14 100644
--- a/cc/layers/surface_layer_impl.h
+++ b/cc/layers/surface_layer_impl.h
@@ -35,7 +35,7 @@ class CC_EXPORT SurfaceLayerImpl : public LayerImpl {
private:
virtual void GetDebugBorderProperties(SkColor* color,
float* width) const OVERRIDE;
- virtual void AsValueInto(base::DictionaryValue* dict) const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
virtual const char* LayerTypeAsString() const OVERRIDE;
SurfaceId surface_id_;
diff --git a/cc/layers/tiled_layer_impl.cc b/cc/layers/tiled_layer_impl.cc
index 5b932ca..86f90b9 100644
--- a/cc/layers/tiled_layer_impl.cc
+++ b/cc/layers/tiled_layer_impl.cc
@@ -5,6 +5,7 @@
#include "cc/layers/tiled_layer_impl.h"
#include "base/basictypes.h"
+#include "base/debug/trace_event_argument.h"
#include "base/strings/stringprintf.h"
#include "cc/base/math_util.h"
#include "cc/debug/debug_colors.h"
@@ -99,9 +100,11 @@ scoped_ptr<LayerImpl> TiledLayerImpl::CreateLayerImpl(
return TiledLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
}
-void TiledLayerImpl::AsValueInto(base::DictionaryValue* state) const {
+void TiledLayerImpl::AsValueInto(base::debug::TracedValue* state) const {
LayerImpl::AsValueInto(state);
- state->Set("invalidation", MathUtil::AsValue(update_rect()).release());
+ state->BeginArray("invalidation");
+ MathUtil::AddToTracedValue(update_rect(), state);
+ state->EndArray();
}
size_t TiledLayerImpl::GPUMemoryUsageInBytes() const {
diff --git a/cc/layers/tiled_layer_impl.h b/cc/layers/tiled_layer_impl.h
index 7fc4347..e3d38a0 100644
--- a/cc/layers/tiled_layer_impl.h
+++ b/cc/layers/tiled_layer_impl.h
@@ -58,7 +58,7 @@ class CC_EXPORT TiledLayerImpl : public LayerImpl {
virtual void GetDebugBorderProperties(SkColor* color, float* width) const
OVERRIDE;
- virtual void AsValueInto(base::DictionaryValue* state) const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE;
private:
virtual const char* LayerTypeAsString() const OVERRIDE;
diff --git a/cc/output/begin_frame_args.cc b/cc/output/begin_frame_args.cc
index 4d1b270..b45eee8 100644
--- a/cc/output/begin_frame_args.cc
+++ b/cc/output/begin_frame_args.cc
@@ -3,6 +3,8 @@
// found in the LICENSE file.
#include "cc/output/begin_frame_args.h"
+
+#include "base/debug/trace_event_argument.h"
#include "ui/gfx/frame_time.h"
namespace cc {
@@ -27,13 +29,19 @@ BeginFrameArgs BeginFrameArgs::Create(base::TimeTicks frame_time,
return BeginFrameArgs(frame_time, deadline, interval);
}
-scoped_ptr<base::Value> BeginFrameArgs::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+scoped_refptr<base::debug::ConvertableToTraceFormat> BeginFrameArgs::AsValue()
+ const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
+ AsValueInto(state.get());
+ return state;
+}
+
+void BeginFrameArgs::AsValueInto(base::debug::TracedValue* state) const {
state->SetString("type", "BeginFrameArgs");
state->SetDouble("frame_time_us", frame_time.ToInternalValue());
state->SetDouble("deadline_us", deadline.ToInternalValue());
state->SetDouble("interval_us", interval.InMicroseconds());
- return state.PassAs<base::Value>();
}
BeginFrameArgs BeginFrameArgs::CreateForSynchronousCompositor(
diff --git a/cc/output/begin_frame_args.h b/cc/output/begin_frame_args.h
index 91ad182..b23a81e 100644
--- a/cc/output/begin_frame_args.h
+++ b/cc/output/begin_frame_args.h
@@ -5,10 +5,18 @@
#ifndef CC_OUTPUT_BEGIN_FRAME_ARGS_H_
#define CC_OUTPUT_BEGIN_FRAME_ARGS_H_
+#include "base/memory/ref_counted.h"
#include "base/time/time.h"
#include "base/values.h"
#include "cc/base/cc_export.h"
+namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+class TracedValue;
+}
+}
+
namespace cc {
struct CC_EXPORT BeginFrameArgs {
@@ -39,7 +47,8 @@ struct CC_EXPORT BeginFrameArgs {
bool IsValid() const { return interval >= base::TimeDelta(); }
- scoped_ptr<base::Value> AsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
base::TimeTicks frame_time;
base::TimeTicks deadline;
diff --git a/cc/output/filter_operation.cc b/cc/output/filter_operation.cc
index 096f6ba..173985b 100644
--- a/cc/output/filter_operation.cc
+++ b/cc/output/filter_operation.cc
@@ -4,6 +4,7 @@
#include <algorithm>
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
#include "cc/output/filter_operation.h"
@@ -254,8 +255,7 @@ FilterOperation FilterOperation::Blend(const FilterOperation* from,
return blended_filter;
}
-scoped_ptr<base::Value> FilterOperation::AsValue() const {
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue);
+void FilterOperation::AsValueInto(base::debug::TracedValue* value) const {
value->SetInteger("type", type_);
switch (type_) {
case FilterOperation::GRAYSCALE:
@@ -272,14 +272,16 @@ scoped_ptr<base::Value> FilterOperation::AsValue() const {
break;
case FilterOperation::DROP_SHADOW:
value->SetDouble("std_deviation", amount_);
- value->Set("offset", MathUtil::AsValue(drop_shadow_offset_).release());
+ value->BeginArray("offset");
+ MathUtil::AddToTracedValue(drop_shadow_offset_, value);
+ value->EndArray();
value->SetInteger("color", drop_shadow_color_);
break;
case FilterOperation::COLOR_MATRIX: {
- scoped_ptr<base::ListValue> matrix(new base::ListValue);
+ value->BeginArray("matrix");
for (size_t i = 0; i < arraysize(matrix_); ++i)
- matrix->AppendDouble(matrix_[i]);
- value->Set("matrix", matrix.release());
+ value->AppendDouble(matrix_[i]);
+ value->EndArray();
break;
}
case FilterOperation::ZOOM:
@@ -302,17 +304,17 @@ scoped_ptr<base::Value> FilterOperation::AsValue() const {
value->SetDouble("inner_threshold", amount_);
value->SetDouble("outer_threshold", outer_threshold_);
scoped_ptr<base::ListValue> region_value(new base::ListValue());
+ value->BeginArray("region");
for (SkRegion::Iterator it(region_); !it.done(); it.next()) {
- region_value->AppendInteger(it.rect().x());
- region_value->AppendInteger(it.rect().y());
- region_value->AppendInteger(it.rect().width());
- region_value->AppendInteger(it.rect().height());
+ value->AppendInteger(it.rect().x());
+ value->AppendInteger(it.rect().y());
+ value->AppendInteger(it.rect().width());
+ value->AppendInteger(it.rect().height());
}
- value->Set("region", region_value.release());
+ value->EndArray();
}
break;
}
- return value.PassAs<base::Value>();
}
} // namespace cc
diff --git a/cc/output/filter_operation.h b/cc/output/filter_operation.h
index cfaf529..fc14cb1 100644
--- a/cc/output/filter_operation.h
+++ b/cc/output/filter_operation.h
@@ -16,6 +16,9 @@
#include "ui/gfx/geometry/point.h"
namespace base {
+namespace debug {
+class TracedValue;
+}
class Value;
}
@@ -220,7 +223,7 @@ class CC_EXPORT FilterOperation {
const FilterOperation* to,
double progress);
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* value) const;
private:
FilterOperation(FilterType type, float amount);
diff --git a/cc/output/filter_operations.cc b/cc/output/filter_operations.cc
index 443d7ec..dcdd480 100644
--- a/cc/output/filter_operations.cc
+++ b/cc/output/filter_operations.cc
@@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <cmath>
-
#include "cc/output/filter_operations.h"
+#include <cmath>
+
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/output/filter_operation.h"
@@ -196,11 +197,12 @@ FilterOperations FilterOperations::Blend(const FilterOperations& from,
return blended_filters;
}
-scoped_ptr<base::Value> FilterOperations::AsValue() const {
- scoped_ptr<base::ListValue> value(new base::ListValue);
- for (size_t i = 0; i < operations_.size(); ++i)
- value->Append(operations_[i].AsValue().release());
- return value.PassAs<base::Value>();
+void FilterOperations::AsValueInto(base::debug::TracedValue* value) const {
+ for (size_t i = 0; i < operations_.size(); ++i) {
+ value->BeginDictionary();
+ operations_[i].AsValueInto(value);
+ value->EndDictionary();
+ }
}
} // namespace cc
diff --git a/cc/output/filter_operations.h b/cc/output/filter_operations.h
index 66f5865..a8c206e 100644
--- a/cc/output/filter_operations.h
+++ b/cc/output/filter_operations.h
@@ -12,6 +12,9 @@
#include "cc/output/filter_operation.h"
namespace base {
+namespace debug {
+class TracedValue;
+}
class Value;
}
@@ -67,8 +70,7 @@ class CC_EXPORT FilterOperations {
// a copy of this.
FilterOperations Blend(const FilterOperations& from, double progress) const;
-
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* value) const;
private:
std::vector<FilterOperation> operations_;
diff --git a/cc/quads/checkerboard_draw_quad.cc b/cc/quads/checkerboard_draw_quad.cc
index b6c5f82..1451766 100644
--- a/cc/quads/checkerboard_draw_quad.cc
+++ b/cc/quads/checkerboard_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/checkerboard_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
@@ -42,7 +43,7 @@ const CheckerboardDrawQuad* CheckerboardDrawQuad::MaterialCast(
return static_cast<const CheckerboardDrawQuad*>(quad);
}
-void CheckerboardDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void CheckerboardDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
value->SetInteger("color", color);
}
diff --git a/cc/quads/checkerboard_draw_quad.h b/cc/quads/checkerboard_draw_quad.h
index ffbf698..f99531d 100644
--- a/cc/quads/checkerboard_draw_quad.h
+++ b/cc/quads/checkerboard_draw_quad.h
@@ -36,7 +36,7 @@ class CC_EXPORT CheckerboardDrawQuad : public DrawQuad {
static const CheckerboardDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/content_draw_quad_base.cc b/cc/quads/content_draw_quad_base.cc
index 18d3d10..fd6e91b 100644
--- a/cc/quads/content_draw_quad_base.cc
+++ b/cc/quads/content_draw_quad_base.cc
@@ -4,6 +4,7 @@
#include "cc/quads/content_draw_quad_base.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -49,9 +50,15 @@ void ContentDrawQuadBase::SetAll(const SharedQuadState* shared_quad_state,
this->swizzle_contents = swizzle_contents;
}
-void ContentDrawQuadBase::ExtendValue(base::DictionaryValue* value) const {
- value->Set("tex_coord_rect", MathUtil::AsValue(tex_coord_rect).release());
- value->Set("texture_size", MathUtil::AsValue(texture_size).release());
+void ContentDrawQuadBase::ExtendValue(base::debug::TracedValue* value) const {
+ value->BeginArray("tex_coord_rect");
+ MathUtil::AddToTracedValue(tex_coord_rect, value);
+ value->EndArray();
+
+ value->BeginDictionary("texture_size");
+ MathUtil::AddToTracedValue(texture_size, value);
+ value->EndDictionary();
+
value->SetBoolean("swizzle_contents", swizzle_contents);
}
diff --git a/cc/quads/content_draw_quad_base.h b/cc/quads/content_draw_quad_base.h
index a286e10..5173d6c 100644
--- a/cc/quads/content_draw_quad_base.h
+++ b/cc/quads/content_draw_quad_base.h
@@ -42,7 +42,7 @@ class CC_EXPORT ContentDrawQuadBase : public DrawQuad {
protected:
ContentDrawQuadBase();
virtual ~ContentDrawQuadBase();
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/debug_border_draw_quad.cc b/cc/quads/debug_border_draw_quad.cc
index 4254e02..c907be7 100644
--- a/cc/quads/debug_border_draw_quad.cc
+++ b/cc/quads/debug_border_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/debug_border_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
@@ -49,7 +50,7 @@ const DebugBorderDrawQuad* DebugBorderDrawQuad::MaterialCast(
return static_cast<const DebugBorderDrawQuad*>(quad);
}
-void DebugBorderDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void DebugBorderDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
value->SetInteger("color", color);
value->SetInteger("width", width);
}
diff --git a/cc/quads/debug_border_draw_quad.h b/cc/quads/debug_border_draw_quad.h
index 18dd869..828d4e0 100644
--- a/cc/quads/debug_border_draw_quad.h
+++ b/cc/quads/debug_border_draw_quad.h
@@ -39,7 +39,7 @@ class CC_EXPORT DebugBorderDrawQuad : public DrawQuad {
static const DebugBorderDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/draw_quad.cc b/cc/quads/draw_quad.cc
index b669ad7..38b24b0 100644
--- a/cc/quads/draw_quad.cc
+++ b/cc/quads/draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -56,48 +57,59 @@ void DrawQuad::SetAll(const SharedQuadState* shared_quad_state,
DrawQuad::~DrawQuad() {
}
-scoped_ptr<base::Value> DrawQuad::AsValue() const {
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+void DrawQuad::AsValueInto(base::debug::TracedValue* value) const {
value->SetInteger("material", material);
- value->Set("shared_state",
- TracedValue::CreateIDRef(shared_quad_state).release());
+ TracedValue::SetIDRef(shared_quad_state, value, "shared_state");
+
+ value->BeginArray("content_space_rect");
+ MathUtil::AddToTracedValue(rect, value);
+ value->EndArray();
- value->Set("content_space_rect", MathUtil::AsValue(rect).release());
bool rect_is_clipped;
gfx::QuadF rect_as_target_space_quad = MathUtil::MapQuad(
shared_quad_state->content_to_target_transform,
gfx::QuadF(rect),
&rect_is_clipped);
- value->Set("rect_as_target_space_quad",
- MathUtil::AsValue(rect_as_target_space_quad).release());
+ value->BeginArray("rect_as_target_space_quad");
+ MathUtil::AddToTracedValue(rect_as_target_space_quad, value);
+ value->EndArray();
+
value->SetBoolean("rect_is_clipped", rect_is_clipped);
- value->Set("content_space_opaque_rect",
- MathUtil::AsValue(opaque_rect).release());
+ value->BeginArray("content_space_opaque_rect");
+ MathUtil::AddToTracedValue(opaque_rect, value);
+ value->EndArray();
+
bool opaque_rect_is_clipped;
gfx::QuadF opaque_rect_as_target_space_quad = MathUtil::MapQuad(
shared_quad_state->content_to_target_transform,
gfx::QuadF(opaque_rect),
&opaque_rect_is_clipped);
- value->Set("opaque_rect_as_target_space_quad",
- MathUtil::AsValue(opaque_rect_as_target_space_quad).release());
+ value->BeginArray("opaque_rect_as_target_space_quad");
+ MathUtil::AddToTracedValue(opaque_rect_as_target_space_quad, value);
+ value->EndArray();
+
value->SetBoolean("opaque_rect_is_clipped", opaque_rect_is_clipped);
- value->Set("content_space_visible_rect",
- MathUtil::AsValue(visible_rect).release());
+ value->BeginArray("content_space_visible_rect");
+ MathUtil::AddToTracedValue(visible_rect, value);
+ value->EndArray();
+
bool visible_rect_is_clipped;
gfx::QuadF visible_rect_as_target_space_quad = MathUtil::MapQuad(
shared_quad_state->content_to_target_transform,
gfx::QuadF(visible_rect),
&visible_rect_is_clipped);
- value->Set("visible_rect_as_target_space_quad",
- MathUtil::AsValue(visible_rect_as_target_space_quad).release());
+
+ value->BeginArray("visible_rect_as_target_space_quad");
+ MathUtil::AddToTracedValue(visible_rect_as_target_space_quad, value);
+ value->EndArray();
+
value->SetBoolean("visible_rect_is_clipped", visible_rect_is_clipped);
value->SetBoolean("needs_blending", needs_blending);
value->SetBoolean("should_draw_with_blending", ShouldDrawWithBlending());
- ExtendValue(value.get());
- return value.PassAs<base::Value>();
+ ExtendValue(value);
}
} // namespace cc
diff --git a/cc/quads/draw_quad.h b/cc/quads/draw_quad.h
index 07193cd..61ca358 100644
--- a/cc/quads/draw_quad.h
+++ b/cc/quads/draw_quad.h
@@ -11,6 +11,9 @@
#include "cc/resources/resource_provider.h"
namespace base {
+namespace debug {
+class TracedValue;
+}
class Value;
class DictionaryValue;
}
@@ -123,7 +126,7 @@ class CC_EXPORT DrawQuad {
return IsLeftEdge() || IsTopEdge() || IsRightEdge() || IsBottomEdge();
}
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* value) const;
protected:
DrawQuad();
@@ -134,7 +137,7 @@ class CC_EXPORT DrawQuad {
const gfx::Rect& opaque_rect,
const gfx::Rect& visible_rect,
bool needs_blending);
- virtual void ExtendValue(base::DictionaryValue* value) const = 0;
+ virtual void ExtendValue(base::debug::TracedValue* value) const = 0;
};
} // namespace cc
diff --git a/cc/quads/io_surface_draw_quad.cc b/cc/quads/io_surface_draw_quad.cc
index cc3581b..e565a43 100644
--- a/cc/quads/io_surface_draw_quad.cc
+++ b/cc/quads/io_surface_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/io_surface_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -56,8 +57,11 @@ const IOSurfaceDrawQuad* IOSurfaceDrawQuad::MaterialCast(
return static_cast<const IOSurfaceDrawQuad*>(quad);
}
-void IOSurfaceDrawQuad::ExtendValue(base::DictionaryValue* value) const {
- value->Set("io_surface_size", MathUtil::AsValue(io_surface_size).release());
+void IOSurfaceDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
+ value->BeginDictionary("io_surface_size");
+ MathUtil::AddToTracedValue(io_surface_size, value);
+ value->EndDictionary();
+
value->SetInteger("io_surface_resource_id", io_surface_resource_id);
const char* orientation_string = NULL;
switch (orientation) {
diff --git a/cc/quads/io_surface_draw_quad.h b/cc/quads/io_surface_draw_quad.h
index 988afeb..86b4d52 100644
--- a/cc/quads/io_surface_draw_quad.h
+++ b/cc/quads/io_surface_draw_quad.h
@@ -49,7 +49,7 @@ class CC_EXPORT IOSurfaceDrawQuad : public DrawQuad {
static const IOSurfaceDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/picture_draw_quad.cc b/cc/quads/picture_draw_quad.cc
index cb1c2c1..af120a4 100644
--- a/cc/quads/picture_draw_quad.cc
+++ b/cc/quads/picture_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/picture_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
#include "cc/resources/platform_color.h"
@@ -79,9 +80,11 @@ const PictureDrawQuad* PictureDrawQuad::MaterialCast(const DrawQuad* quad) {
return static_cast<const PictureDrawQuad*>(quad);
}
-void PictureDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void PictureDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
ContentDrawQuadBase::ExtendValue(value);
- value->Set("content_rect", MathUtil::AsValue(content_rect).release());
+ value->BeginArray("content_rect");
+ MathUtil::AddToTracedValue(content_rect, value);
+ value->EndArray();
value->SetDouble("contents_scale", contents_scale);
value->SetInteger("texture_format", texture_format);
// TODO(piman): picture_pile?
diff --git a/cc/quads/picture_draw_quad.h b/cc/quads/picture_draw_quad.h
index 944a8fb..4fb6b4b 100644
--- a/cc/quads/picture_draw_quad.h
+++ b/cc/quads/picture_draw_quad.h
@@ -56,7 +56,7 @@ class CC_EXPORT PictureDrawQuad : public ContentDrawQuadBase {
static const PictureDrawQuad* MaterialCast(const DrawQuad* quad);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/render_pass.cc b/cc/quads/render_pass.cc
index c7f83a3..43bb7cd 100644
--- a/cc/quads/render_pass.cc
+++ b/cc/quads/render_pass.cc
@@ -4,6 +4,7 @@
#include "cc/quads/render_pass.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
#include "cc/debug/traced_value.h"
@@ -157,27 +158,39 @@ void RenderPass::SetAll(Id id,
DCHECK(shared_quad_state_list.empty());
}
-scoped_ptr<base::Value> RenderPass::AsValue() const {
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- value->Set("output_rect", MathUtil::AsValue(output_rect).release());
- value->Set("damage_rect", MathUtil::AsValue(damage_rect).release());
+void RenderPass::AsValueInto(base::debug::TracedValue* value) const {
+ value->BeginArray("output_rect");
+ MathUtil::AddToTracedValue(output_rect, value);
+ value->EndArray();
+
+ value->BeginArray("damage_rect");
+ MathUtil::AddToTracedValue(damage_rect, value);
+ value->EndArray();
+
value->SetBoolean("has_transparent_background", has_transparent_background);
value->SetInteger("copy_requests", copy_requests.size());
- scoped_ptr<base::ListValue> shared_states_value(new base::ListValue());
+
+ value->BeginArray("shared_quad_state_list");
for (size_t i = 0; i < shared_quad_state_list.size(); ++i) {
- shared_states_value->Append(shared_quad_state_list[i]->AsValue().release());
+ value->BeginDictionary();
+ shared_quad_state_list[i]->AsValueInto(value);
+ value->EndDictionary();
}
- value->Set("shared_quad_state_list", shared_states_value.release());
- scoped_ptr<base::ListValue> quad_list_value(new base::ListValue());
+ value->EndArray();
+
+ value->BeginArray("quad_list");
for (size_t i = 0; i < quad_list.size(); ++i) {
- quad_list_value->Append(quad_list[i]->AsValue().release());
+ value->BeginDictionary();
+ quad_list[i]->AsValueInto(value);
+ value->EndDictionary();
}
- value->Set("quad_list", quad_list_value.release());
+ value->EndArray();
TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"),
- value.get(), "cc::RenderPass", id.AsTracingId());
- return value.PassAs<base::Value>();
+ value,
+ "cc::RenderPass",
+ id.AsTracingId());
}
SharedQuadState* RenderPass::CreateAndAppendSharedQuadState() {
diff --git a/cc/quads/render_pass.h b/cc/quads/render_pass.h
index 3032f05..8d41142 100644
--- a/cc/quads/render_pass.h
+++ b/cc/quads/render_pass.h
@@ -18,6 +18,9 @@
#include "ui/gfx/transform.h"
namespace base {
+namespace debug {
+class TracedValue;
+}
class Value;
};
@@ -87,7 +90,7 @@ class CC_EXPORT RenderPass {
const gfx::Transform& transform_to_root_target,
bool has_transparent_background);
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
SharedQuadState* CreateAndAppendSharedQuadState();
template <typename DrawQuadType>
diff --git a/cc/quads/render_pass_draw_quad.cc b/cc/quads/render_pass_draw_quad.cc
index 6259fdf..380f2f6 100644
--- a/cc/quads/render_pass_draw_quad.cc
+++ b/cc/quads/render_pass_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/render_pass_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
#include "cc/debug/traced_value.h"
@@ -81,16 +82,24 @@ const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast(
return static_cast<const RenderPassDrawQuad*>(quad);
}
-void RenderPassDrawQuad::ExtendValue(base::DictionaryValue* value) const {
- value->Set("render_pass_id",
- TracedValue::CreateIDRef(render_pass_id.AsTracingId()).release());
+void RenderPassDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
+ TracedValue::SetIDRef(render_pass_id.AsTracingId(), value, "render_pass_id");
value->SetBoolean("is_replica", is_replica);
value->SetInteger("mask_resource_id", mask_resource_id);
- value->Set("contents_changed_since_last_frame",
- MathUtil::AsValue(contents_changed_since_last_frame).release());
- value->Set("mask_uv_rect", MathUtil::AsValue(mask_uv_rect).release());
- value->Set("filters", filters.AsValue().release());
- value->Set("background_filters", background_filters.AsValue().release());
+ value->BeginArray("contents_changed_since_last_frame");
+ MathUtil::AddToTracedValue(contents_changed_since_last_frame, value);
+ value->EndArray();
+
+ value->BeginArray("mask_uv_rect");
+ MathUtil::AddToTracedValue(mask_uv_rect, value);
+ value->EndArray();
+ value->BeginDictionary("filters");
+ filters.AsValueInto(value);
+ value->EndDictionary();
+
+ value->BeginDictionary("background_filters");
+ background_filters.AsValueInto(value);
+ value->EndDictionary();
}
} // namespace cc
diff --git a/cc/quads/render_pass_draw_quad.h b/cc/quads/render_pass_draw_quad.h
index e3d6f14..7237a854 100644
--- a/cc/quads/render_pass_draw_quad.h
+++ b/cc/quads/render_pass_draw_quad.h
@@ -63,7 +63,7 @@ class CC_EXPORT RenderPassDrawQuad : public DrawQuad {
static const RenderPassDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/shared_quad_state.cc b/cc/quads/shared_quad_state.cc
index 57959e3..83df365 100644
--- a/cc/quads/shared_quad_state.cc
+++ b/cc/quads/shared_quad_state.cc
@@ -4,6 +4,7 @@
#include "cc/quads/shared_quad_state.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
#include "cc/debug/traced_value.h"
@@ -45,22 +46,32 @@ void SharedQuadState::SetAll(const gfx::Transform& content_to_target_transform,
this->sorting_context_id = sorting_context_id;
}
-scoped_ptr<base::Value> SharedQuadState::AsValue() const {
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
- value->Set("transform",
- MathUtil::AsValue(content_to_target_transform).release());
- value->Set("layer_content_bounds",
- MathUtil::AsValue(content_bounds).release());
- value->Set("layer_visible_content_rect",
- MathUtil::AsValue(visible_content_rect).release());
+void SharedQuadState::AsValueInto(base::debug::TracedValue* value) const {
+ value->BeginArray("transform");
+ MathUtil::AddToTracedValue(content_to_target_transform, value);
+ value->EndArray();
+
+ value->BeginDictionary("layer_content_bounds");
+ MathUtil::AddToTracedValue(content_bounds, value);
+ value->EndDictionary();
+
+ value->BeginArray("layer_visible_content_rect");
+ MathUtil::AddToTracedValue(visible_content_rect, value);
+ value->EndArray();
+
value->SetBoolean("is_clipped", is_clipped);
- value->Set("clip_rect", MathUtil::AsValue(clip_rect).release());
+
+ value->BeginArray("clip_rect");
+ MathUtil::AddToTracedValue(clip_rect, value);
+ value->EndArray();
+
value->SetDouble("opacity", opacity);
value->SetString("blend_mode", SkXfermode::ModeName(blend_mode));
TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"),
- value.get(), "cc::SharedQuadState", this);
- return value.PassAs<base::Value>();
+ value,
+ "cc::SharedQuadState",
+ this);
}
} // namespace cc
diff --git a/cc/quads/shared_quad_state.h b/cc/quads/shared_quad_state.h
index 30a1e25..dde87a8 100644
--- a/cc/quads/shared_quad_state.h
+++ b/cc/quads/shared_quad_state.h
@@ -12,6 +12,9 @@
#include "ui/gfx/transform.h"
namespace base {
+namespace debug {
+class TracedValue;
+}
class Value;
}
@@ -37,7 +40,7 @@ class CC_EXPORT SharedQuadState {
float opacity,
SkXfermode::Mode blend_mode,
int sorting_context_id);
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
// Transforms from quad's original content space to its target content space.
gfx::Transform content_to_target_transform;
diff --git a/cc/quads/solid_color_draw_quad.cc b/cc/quads/solid_color_draw_quad.cc
index 333ee17..a11b151 100644
--- a/cc/quads/solid_color_draw_quad.cc
+++ b/cc/quads/solid_color_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/solid_color_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
@@ -47,7 +48,7 @@ const SolidColorDrawQuad* SolidColorDrawQuad::MaterialCast(
return static_cast<const SolidColorDrawQuad*>(quad);
}
-void SolidColorDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void SolidColorDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
value->SetInteger("color", color);
value->SetBoolean("force_anti_aliasing_off", force_anti_aliasing_off);
}
diff --git a/cc/quads/solid_color_draw_quad.h b/cc/quads/solid_color_draw_quad.h
index 1e746e0..bfb6022 100644
--- a/cc/quads/solid_color_draw_quad.h
+++ b/cc/quads/solid_color_draw_quad.h
@@ -39,7 +39,7 @@ class CC_EXPORT SolidColorDrawQuad : public DrawQuad {
static const SolidColorDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/stream_video_draw_quad.cc b/cc/quads/stream_video_draw_quad.cc
index 683d4e5..6b5a509 100644
--- a/cc/quads/stream_video_draw_quad.cc
+++ b/cc/quads/stream_video_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/stream_video_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -49,9 +50,11 @@ const StreamVideoDrawQuad* StreamVideoDrawQuad::MaterialCast(
return static_cast<const StreamVideoDrawQuad*>(quad);
}
-void StreamVideoDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void StreamVideoDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
value->SetInteger("resource_id", resource_id);
- value->Set("matrix", MathUtil::AsValue(matrix).release());
+ value->BeginArray("matrix");
+ MathUtil::AddToTracedValue(matrix, value);
+ value->EndArray();
}
} // namespace cc
diff --git a/cc/quads/stream_video_draw_quad.h b/cc/quads/stream_video_draw_quad.h
index 0570f31..5db7c3b 100644
--- a/cc/quads/stream_video_draw_quad.h
+++ b/cc/quads/stream_video_draw_quad.h
@@ -40,7 +40,7 @@ class CC_EXPORT StreamVideoDrawQuad : public DrawQuad {
static const StreamVideoDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/surface_draw_quad.cc b/cc/quads/surface_draw_quad.cc
index 04645da..7ed8f2e 100644
--- a/cc/quads/surface_draw_quad.cc
+++ b/cc/quads/surface_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/surface_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
@@ -42,7 +43,7 @@ const SurfaceDrawQuad* SurfaceDrawQuad::MaterialCast(const DrawQuad* quad) {
return static_cast<const SurfaceDrawQuad*>(quad);
}
-void SurfaceDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void SurfaceDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
value->SetInteger("surface_id", surface_id.id);
}
diff --git a/cc/quads/surface_draw_quad.h b/cc/quads/surface_draw_quad.h
index 7b22ed5..91e5668 100644
--- a/cc/quads/surface_draw_quad.h
+++ b/cc/quads/surface_draw_quad.h
@@ -36,7 +36,7 @@ class CC_EXPORT SurfaceDrawQuad : public DrawQuad {
static const SurfaceDrawQuad* MaterialCast(const DrawQuad* quad);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/texture_draw_quad.cc b/cc/quads/texture_draw_quad.cc
index 6637e4f..72435c2 100644
--- a/cc/quads/texture_draw_quad.cc
+++ b/cc/quads/texture_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/texture_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -83,16 +84,24 @@ const TextureDrawQuad* TextureDrawQuad::MaterialCast(const DrawQuad* quad) {
return static_cast<const TextureDrawQuad*>(quad);
}
-void TextureDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void TextureDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
value->SetInteger("resource_id", resource_id);
value->SetBoolean("premultiplied_alpha", premultiplied_alpha);
- value->Set("uv_top_left", MathUtil::AsValue(uv_top_left).release());
- value->Set("uv_bottom_right", MathUtil::AsValue(uv_bottom_right).release());
+ value->BeginArray("uv_top_left");
+ MathUtil::AddToTracedValue(uv_top_left, value);
+ value->EndArray();
+
+ value->BeginArray("uv_bottom_right");
+ MathUtil::AddToTracedValue(uv_bottom_right, value);
+ value->EndArray();
+
value->SetInteger("background_color", background_color);
- scoped_ptr<base::ListValue> vertex_opacity_value(new base::ListValue);
+
+ value->BeginArray("vertex_opacity");
for (size_t i = 0; i < 4; ++i)
- vertex_opacity_value->AppendDouble(vertex_opacity[i]);
- value->Set("vertex_opacity", vertex_opacity_value.release());
+ value->AppendDouble(vertex_opacity[i]);
+ value->EndArray();
+
value->SetBoolean("flipped", flipped);
}
diff --git a/cc/quads/texture_draw_quad.h b/cc/quads/texture_draw_quad.h
index 409679b..ef8090c 100644
--- a/cc/quads/texture_draw_quad.h
+++ b/cc/quads/texture_draw_quad.h
@@ -55,7 +55,7 @@ class CC_EXPORT TextureDrawQuad : public DrawQuad {
static const TextureDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/tile_draw_quad.cc b/cc/quads/tile_draw_quad.cc
index 839f0de..ea3a14a 100644
--- a/cc/quads/tile_draw_quad.cc
+++ b/cc/quads/tile_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/tile_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "third_party/khronos/GLES2/gl2.h"
@@ -61,7 +62,7 @@ const TileDrawQuad* TileDrawQuad::MaterialCast(const DrawQuad* quad) {
return static_cast<const TileDrawQuad*>(quad);
}
-void TileDrawQuad::ExtendValue(base::DictionaryValue* value) const {
+void TileDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
ContentDrawQuadBase::ExtendValue(value);
value->SetInteger("resource_id", resource_id);
}
diff --git a/cc/quads/tile_draw_quad.h b/cc/quads/tile_draw_quad.h
index 2d3c2ee..72e6bba 100644
--- a/cc/quads/tile_draw_quad.h
+++ b/cc/quads/tile_draw_quad.h
@@ -41,7 +41,7 @@ class CC_EXPORT TileDrawQuad : public ContentDrawQuadBase {
static const TileDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/quads/yuv_video_draw_quad.cc b/cc/quads/yuv_video_draw_quad.cc
index d2443ba..612362e 100644
--- a/cc/quads/yuv_video_draw_quad.cc
+++ b/cc/quads/yuv_video_draw_quad.cc
@@ -4,6 +4,7 @@
#include "cc/quads/yuv_video_draw_quad.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -74,8 +75,10 @@ const YUVVideoDrawQuad* YUVVideoDrawQuad::MaterialCast(
return static_cast<const YUVVideoDrawQuad*>(quad);
}
-void YUVVideoDrawQuad::ExtendValue(base::DictionaryValue* value) const {
- value->Set("tex_coord_rect", MathUtil::AsValue(tex_coord_rect).release());
+void YUVVideoDrawQuad::ExtendValue(base::debug::TracedValue* value) const {
+ value->BeginArray("tex_coord_rect");
+ MathUtil::AddToTracedValue(tex_coord_rect, value);
+ value->EndArray();
value->SetInteger("y_plane_resource_id", y_plane_resource_id);
value->SetInteger("u_plane_resource_id", u_plane_resource_id);
value->SetInteger("v_plane_resource_id", v_plane_resource_id);
diff --git a/cc/quads/yuv_video_draw_quad.h b/cc/quads/yuv_video_draw_quad.h
index 93975d7..930c821 100644
--- a/cc/quads/yuv_video_draw_quad.h
+++ b/cc/quads/yuv_video_draw_quad.h
@@ -61,7 +61,7 @@ class CC_EXPORT YUVVideoDrawQuad : public DrawQuad {
static const YUVVideoDrawQuad* MaterialCast(const DrawQuad*);
private:
- virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE;
+ virtual void ExtendValue(base::debug::TracedValue* value) const OVERRIDE;
};
} // namespace cc
diff --git a/cc/resources/image_copy_raster_worker_pool.cc b/cc/resources/image_copy_raster_worker_pool.cc
index f3f8884..2a9b7f1 100644
--- a/cc/resources/image_copy_raster_worker_pool.cc
+++ b/cc/resources/image_copy_raster_worker_pool.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/debug/traced_value.h"
#include "cc/resources/resource_pool.h"
#include "cc/resources/scoped_resource.h"
@@ -141,12 +142,7 @@ void ImageCopyRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
resource_pool_->ReduceResourceUsage();
TRACE_EVENT_ASYNC_STEP_INTO1(
- "cc",
- "ScheduledTasks",
- this,
- "rasterizing",
- "state",
- TracedValue::FromValue(StateAsValue().release()));
+ "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue());
}
void ImageCopyRasterWorkerPool::CheckForCompletedTasks() {
@@ -223,12 +219,7 @@ void ImageCopyRasterWorkerPool::OnRasterRequiredForActivationFinished() {
DCHECK(raster_tasks_required_for_activation_pending_);
raster_tasks_required_for_activation_pending_ = false;
TRACE_EVENT_ASYNC_STEP_INTO1(
- "cc",
- "ScheduledTasks",
- this,
- "rasterizing",
- "state",
- TracedValue::FromValue(StateAsValue().release()));
+ "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue());
client_->DidFinishRunningTasksRequiredForActivation();
}
@@ -240,19 +231,22 @@ void ImageCopyRasterWorkerPool::FlushCopies() {
has_performed_copy_since_last_flush_ = false;
}
-scoped_ptr<base::Value> ImageCopyRasterWorkerPool::StateAsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+ImageCopyRasterWorkerPool::StateAsValue() const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
state->SetInteger("pending_count", raster_task_states_.size());
state->SetBoolean("tasks_required_for_activation_pending",
raster_tasks_required_for_activation_pending_);
- state->Set("staging_state", StagingStateAsValue().release());
+ state->BeginDictionary("staging_state");
+ StagingStateAsValueInto(state.get());
+ state->EndDictionary();
- return state.PassAs<base::Value>();
+ return state;
}
-scoped_ptr<base::Value> ImageCopyRasterWorkerPool::StagingStateAsValue() const {
- scoped_ptr<base::DictionaryValue> staging_state(new base::DictionaryValue);
-
+void ImageCopyRasterWorkerPool::StagingStateAsValueInto(
+ base::debug::TracedValue* staging_state) const {
staging_state->SetInteger("staging_resource_count",
resource_pool_->total_resource_count());
staging_state->SetInteger("bytes_used_for_staging_resources",
@@ -263,8 +257,6 @@ scoped_ptr<base::Value> ImageCopyRasterWorkerPool::StagingStateAsValue() const {
staging_state->SetInteger("bytes_pending_copy",
resource_pool_->total_memory_usage_bytes() -
resource_pool_->acquired_memory_usage_bytes());
-
- return staging_state.PassAs<base::Value>();
}
} // namespace cc
diff --git a/cc/resources/image_copy_raster_worker_pool.h b/cc/resources/image_copy_raster_worker_pool.h
index 8f9d678..62cf3d0 100644
--- a/cc/resources/image_copy_raster_worker_pool.h
+++ b/cc/resources/image_copy_raster_worker_pool.h
@@ -13,6 +13,13 @@
#include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
+namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+class TracedValue;
+}
+}
+
namespace cc {
class ResourcePool;
class ResourceProvider;
@@ -77,8 +84,8 @@ class CC_EXPORT ImageCopyRasterWorkerPool : public RasterWorkerPool,
void OnRasterFinished();
void OnRasterRequiredForActivationFinished();
void FlushCopies();
- scoped_ptr<base::Value> StateAsValue() const;
- scoped_ptr<base::Value> StagingStateAsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
+ void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
TaskGraphRunner* task_graph_runner_;
diff --git a/cc/resources/image_raster_worker_pool.cc b/cc/resources/image_raster_worker_pool.cc
index 79cfe37..8ac59d3 100644
--- a/cc/resources/image_raster_worker_pool.cc
+++ b/cc/resources/image_raster_worker_pool.cc
@@ -5,6 +5,7 @@
#include "cc/resources/image_raster_worker_pool.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/debug/traced_value.h"
#include "cc/resources/resource.h"
@@ -118,12 +119,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
new_raster_required_for_activation_finished_task;
TRACE_EVENT_ASYNC_STEP_INTO1(
- "cc",
- "ScheduledTasks",
- this,
- "rasterizing",
- "state",
- TracedValue::FromValue(StateAsValue().release()));
+ "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue());
}
void ImageRasterWorkerPool::CheckForCompletedTasks() {
@@ -174,21 +170,18 @@ void ImageRasterWorkerPool::OnRasterRequiredForActivationFinished() {
DCHECK(raster_tasks_required_for_activation_pending_);
raster_tasks_required_for_activation_pending_ = false;
TRACE_EVENT_ASYNC_STEP_INTO1(
- "cc",
- "ScheduledTasks",
- this,
- "rasterizing",
- "state",
- TracedValue::FromValue(StateAsValue().release()));
+ "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue());
client_->DidFinishRunningTasksRequiredForActivation();
}
-scoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+ImageRasterWorkerPool::StateAsValue() const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
state->SetBoolean("tasks_required_for_activation_pending",
raster_tasks_required_for_activation_pending_);
- return state.PassAs<base::Value>();
+ return state;
}
} // namespace cc
diff --git a/cc/resources/image_raster_worker_pool.h b/cc/resources/image_raster_worker_pool.h
index 2e11a22..39ac723 100644
--- a/cc/resources/image_raster_worker_pool.h
+++ b/cc/resources/image_raster_worker_pool.h
@@ -10,6 +10,12 @@
#include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
+namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+}
+}
+
namespace cc {
class ResourceProvider;
@@ -45,7 +51,7 @@ class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool,
private:
void OnRasterFinished();
void OnRasterRequiredForActivationFinished();
- scoped_ptr<base::Value> StateAsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
TaskGraphRunner* task_graph_runner_;
diff --git a/cc/resources/managed_tile_state.cc b/cc/resources/managed_tile_state.cc
index c760eb77..7109237 100644
--- a/cc/resources/managed_tile_state.cc
+++ b/cc/resources/managed_tile_state.cc
@@ -5,43 +5,36 @@
#include "cc/resources/managed_tile_state.h"
#include <limits>
+#include <string>
+#include "base/debug/trace_event_argument.h"
#include "cc/base/math_util.h"
namespace cc {
-scoped_ptr<base::Value> ManagedTileBinAsValue(ManagedTileBin bin) {
+std::string ManagedTileBinToString(ManagedTileBin bin) {
switch (bin) {
case NOW_AND_READY_TO_DRAW_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("NOW_AND_READY_TO_DRAW_BIN"));
+ return "NOW_AND_READY_TO_DRAW_BIN";
case NOW_BIN:
- return scoped_ptr<base::Value>(new base::StringValue("NOW_BIN"));
+ return "NOW_BIN";
case SOON_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("SOON_BIN"));
+ return "SOON_BIN";
case EVENTUALLY_AND_ACTIVE_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("EVENTUALLY_AND_ACTIVE_BIN"));
+ return "EVENTUALLY_AND_ACTIVE_BIN";
case EVENTUALLY_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("EVENTUALLY_BIN"));
+ return "EVENTUALLY_BIN";
case AT_LAST_AND_ACTIVE_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("AT_LAST_AND_ACTIVE_BIN"));
+ return "AT_LAST_AND_ACTIVE_BIN";
case AT_LAST_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("AT_LAST_BIN"));
+ return "AT_LAST_BIN";
case NEVER_BIN:
- return scoped_ptr<base::Value>(
- new base::StringValue("NEVER_BIN"));
+ return "NEVER_BIN";
case NUM_BINS:
NOTREACHED();
- return scoped_ptr<base::Value>(
- new base::StringValue("Invalid Bin (NUM_BINS)"));
+ return "Invalid Bin (NUM_BINS)";
}
- return scoped_ptr<base::Value>(
- new base::StringValue("Invalid Bin (UNKNOWN)"));
+ return "Invalid Bin (UNKNOWN)";
}
ManagedTileState::ManagedTileState()
@@ -80,7 +73,7 @@ size_t ManagedTileState::TileVersion::GPUMemoryUsageInBytes() const {
ManagedTileState::~ManagedTileState() {}
-scoped_ptr<base::Value> ManagedTileState::AsValue() const {
+void ManagedTileState::AsValueInto(base::debug::TracedValue* state) const {
bool has_resource = false;
bool has_active_task = false;
for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) {
@@ -90,14 +83,13 @@ scoped_ptr<base::Value> ManagedTileState::AsValue() const {
bool is_using_gpu_memory = has_resource || has_active_task;
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
state->SetBoolean("has_resource", has_resource);
state->SetBoolean("is_using_gpu_memory", is_using_gpu_memory);
- state->Set("bin", ManagedTileBinAsValue(bin).release());
- state->Set("resolution", TileResolutionAsValue(resolution).release());
- state->Set("priority_bin", TilePriorityBinAsValue(priority_bin).release());
- state->Set("distance_to_visible",
- MathUtil::AsValueSafely(distance_to_visible).release());
+ state->SetString("bin", ManagedTileBinToString(bin));
+ state->SetString("resolution", TileResolutionToString(resolution));
+ state->SetString("priority_bin", TilePriorityBinToString(priority_bin));
+ state->SetDouble("distance_to_visible",
+ MathUtil::AsFloatSafely(distance_to_visible));
state->SetBoolean("required_for_activation", required_for_activation);
state->SetBoolean(
"is_solid_color",
@@ -107,7 +99,6 @@ scoped_ptr<base::Value> ManagedTileState::AsValue() const {
tile_versions[raster_mode].mode_ == TileVersion::SOLID_COLOR_MODE &&
!SkColorGetA(tile_versions[raster_mode].solid_color_));
state->SetInteger("scheduled_priority", scheduled_priority);
- return state.PassAs<base::Value>();
}
} // namespace cc
diff --git a/cc/resources/managed_tile_state.h b/cc/resources/managed_tile_state.h
index 7224dd6..faa7c63 100644
--- a/cc/resources/managed_tile_state.h
+++ b/cc/resources/managed_tile_state.h
@@ -104,7 +104,7 @@ class CC_EXPORT ManagedTileState {
ManagedTileState();
~ManagedTileState();
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
// Persisted state: valid all the time.
TileVersion tile_versions[NUM_RASTER_MODES];
diff --git a/cc/resources/picture.cc b/cc/resources/picture.cc
index 959e64c..e206e8d 100644
--- a/cc/resources/picture.cc
+++ b/cc/resources/picture.cc
@@ -10,6 +10,7 @@
#include "base/base64.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
#include "cc/base/util.h"
@@ -586,18 +587,22 @@ Picture::PixelRefIterator& Picture::PixelRefIterator::operator++() {
scoped_refptr<base::debug::ConvertableToTraceFormat>
Picture::AsTraceableRasterData(float scale) const {
- scoped_ptr<base::DictionaryValue> raster_data(new base::DictionaryValue());
- raster_data->Set("picture_id", TracedValue::CreateIDRef(this).release());
+ scoped_refptr<base::debug::TracedValue> raster_data =
+ new base::debug::TracedValue();
+ TracedValue::SetIDRef(this, raster_data.get(), "picture_id");
raster_data->SetDouble("scale", scale);
- return TracedValue::FromValue(raster_data.release());
+ return raster_data;
}
scoped_refptr<base::debug::ConvertableToTraceFormat>
Picture::AsTraceableRecordData() const {
- scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue());
- record_data->Set("picture_id", TracedValue::CreateIDRef(this).release());
- record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release());
- return TracedValue::FromValue(record_data.release());
+ scoped_refptr<base::debug::TracedValue> record_data =
+ new base::debug::TracedValue();
+ TracedValue::SetIDRef(this, record_data.get(), "picture_id");
+ record_data->BeginArray("layer_rect");
+ MathUtil::AddToTracedValue(layer_rect_, record_data.get());
+ record_data->EndArray();
+ return record_data;
}
} // namespace cc
diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc
index 64661c1..2809d70 100644
--- a/cc/resources/picture_layer_tiling.cc
+++ b/cc/resources/picture_layer_tiling.cc
@@ -9,6 +9,7 @@
#include <limits>
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/base/math_util.h"
#include "cc/resources/tile.h"
#include "cc/resources/tile_priority.h"
@@ -658,12 +659,12 @@ void PictureLayerTiling::DidBecomeActive() {
}
}
-scoped_ptr<base::Value> PictureLayerTiling::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
+void PictureLayerTiling::AsValueInto(base::debug::TracedValue* state) const {
state->SetInteger("num_tiles", tiles_.size());
state->SetDouble("content_scale", contents_scale_);
- state->Set("tiling_size", MathUtil::AsValue(tiling_size()).release());
- return state.PassAs<base::Value>();
+ state->BeginDictionary("tiling_size");
+ MathUtil::AddToTracedValue(tiling_size(), state);
+ state->EndDictionary();
}
size_t PictureLayerTiling::GPUMemoryUsageInBytes() const {
diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h
index a816450..285f64d 100644
--- a/cc/resources/picture_layer_tiling.h
+++ b/cc/resources/picture_layer_tiling.h
@@ -18,6 +18,12 @@
#include "cc/resources/tile_priority.h"
#include "ui/gfx/rect.h"
+namespace base {
+namespace debug {
+class TracedValue;
+}
+}
+
namespace cc {
template <typename LayerType>
@@ -242,7 +248,7 @@ class CC_EXPORT PictureLayerTiling {
return frame_time_in_seconds != last_impl_frame_time_in_seconds_;
}
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* array) const;
size_t GPUMemoryUsageInBytes() const;
struct RectExpansionCache {
diff --git a/cc/resources/picture_layer_tiling_set.cc b/cc/resources/picture_layer_tiling_set.cc
index e24fb52..c799235 100644
--- a/cc/resources/picture_layer_tiling_set.cc
+++ b/cc/resources/picture_layer_tiling_set.cc
@@ -317,11 +317,12 @@ void PictureLayerTilingSet::DidBecomeRecycled() {
tilings_[i]->DidBecomeRecycled();
}
-scoped_ptr<base::Value> PictureLayerTilingSet::AsValue() const {
- scoped_ptr<base::ListValue> state(new base::ListValue());
- for (size_t i = 0; i < tilings_.size(); ++i)
- state->Append(tilings_[i]->AsValue().release());
- return state.PassAs<base::Value>();
+void PictureLayerTilingSet::AsValueInto(base::debug::TracedValue* state) const {
+ for (size_t i = 0; i < tilings_.size(); ++i) {
+ state->BeginDictionary();
+ tilings_[i]->AsValueInto(state);
+ state->EndDictionary();
+ }
}
size_t PictureLayerTilingSet::GPUMemoryUsageInBytes() const {
diff --git a/cc/resources/picture_layer_tiling_set.h b/cc/resources/picture_layer_tiling_set.h
index d37d9d5..f19c1b8 100644
--- a/cc/resources/picture_layer_tiling_set.h
+++ b/cc/resources/picture_layer_tiling_set.h
@@ -10,6 +10,12 @@
#include "cc/resources/picture_layer_tiling.h"
#include "ui/gfx/size.h"
+namespace base {
+namespace debug {
+class TracedValue;
+}
+}
+
namespace cc {
class CC_EXPORT PictureLayerTilingSet {
@@ -115,7 +121,7 @@ class CC_EXPORT PictureLayerTilingSet {
Region::Iterator region_iter_;
};
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* array) const;
size_t GPUMemoryUsageInBytes() const;
TilingRange GetTilingRange(TilingRangeType type) const;
diff --git a/cc/resources/picture_pile_base.cc b/cc/resources/picture_pile_base.cc
index 55209db..146c886 100644
--- a/cc/resources/picture_pile_base.cc
+++ b/cc/resources/picture_pile_base.cc
@@ -8,6 +8,7 @@
#include <set>
#include <vector>
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/values.h"
#include "cc/base/math_util.h"
@@ -198,8 +199,7 @@ gfx::Rect PicturePileBase::PadRect(const gfx::Rect& rect) {
return padded_rect;
}
-scoped_ptr<base::Value> PicturePileBase::AsValue() const {
- scoped_ptr<base::ListValue> pictures(new base::ListValue());
+void PicturePileBase::AsValueInto(base::debug::TracedValue* pictures) const {
gfx::Rect tiling_rect(tiling_.tiling_size());
std::set<void*> appended_pictures;
bool include_borders = true;
@@ -213,10 +213,9 @@ scoped_ptr<base::Value> PicturePileBase::AsValue() const {
Picture* picture = map_iter->second.GetPicture();
if (picture && (appended_pictures.count(picture) == 0)) {
appended_pictures.insert(picture);
- pictures->Append(TracedValue::CreateIDRef(picture).release());
+ TracedValue::AppendIDRef(picture, pictures);
}
}
- return pictures.PassAs<base::Value>();
}
PicturePileBase::PictureInfo::PictureInfo() : last_frame_number_(0) {}
diff --git a/cc/resources/picture_pile_base.h b/cc/resources/picture_pile_base.h
index f244f8f..b188df7 100644
--- a/cc/resources/picture_pile_base.h
+++ b/cc/resources/picture_pile_base.h
@@ -18,6 +18,9 @@
#include "ui/gfx/size.h"
namespace base {
+namespace debug {
+class TracedValue;
+}
class Value;
}
@@ -52,7 +55,7 @@ class CC_EXPORT PicturePileBase : public base::RefCounted<PicturePileBase> {
void SetTileGridSize(const gfx::Size& tile_grid_size);
TilingData& tiling() { return tiling_; }
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* array) const;
protected:
class CC_EXPORT PictureInfo {
diff --git a/cc/resources/pixel_buffer_raster_worker_pool.cc b/cc/resources/pixel_buffer_raster_worker_pool.cc
index def15c4..d7554736 100644
--- a/cc/resources/pixel_buffer_raster_worker_pool.cc
+++ b/cc/resources/pixel_buffer_raster_worker_pool.cc
@@ -8,6 +8,7 @@
#include "base/containers/stack_container.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/debug/traced_value.h"
#include "cc/resources/resource.h"
#include "gpu/command_buffer/client/gles2_interface.h"
@@ -222,12 +223,7 @@ void PixelBufferRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
check_for_completed_raster_task_notifier_.Schedule();
TRACE_EVENT_ASYNC_STEP_INTO1(
- "cc",
- "ScheduledTasks",
- this,
- StateName(),
- "state",
- TracedValue::FromValue(StateAsValue().release()));
+ "cc", "ScheduledTasks", this, StateName(), "state", StateAsValue());
}
void PixelBufferRasterWorkerPool::CheckForCompletedTasks() {
@@ -460,12 +456,7 @@ void PixelBufferRasterWorkerPool::CheckForCompletedRasterTasks() {
ScheduleMoreTasks();
TRACE_EVENT_ASYNC_STEP_INTO1(
- "cc",
- "ScheduledTasks",
- this,
- StateName(),
- "state",
- TracedValue::FromValue(StateAsValue().release()));
+ "cc", "ScheduledTasks", this, StateName(), "state", StateAsValue());
// Schedule another check for completed raster tasks while there are
// pending raster tasks or pending uploads.
@@ -742,29 +733,29 @@ void PixelBufferRasterWorkerPool::CheckForCompletedRasterizerTasks() {
completed_tasks_.clear();
}
-scoped_ptr<base::Value> PixelBufferRasterWorkerPool::StateAsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
-
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+PixelBufferRasterWorkerPool::StateAsValue() const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
state->SetInteger("completed_count", completed_raster_tasks_.size());
state->SetInteger("pending_count", raster_task_states_.size());
state->SetInteger("pending_upload_count",
raster_tasks_with_pending_upload_.size());
state->SetInteger("pending_required_for_activation_count",
raster_tasks_required_for_activation_count_);
- state->Set("throttle_state", ThrottleStateAsValue().release());
- return state.PassAs<base::Value>();
+ state->BeginDictionary("throttle_state");
+ ThrottleStateAsValueInto(state.get());
+ state->EndDictionary();
+ return state;
}
-scoped_ptr<base::Value> PixelBufferRasterWorkerPool::ThrottleStateAsValue()
- const {
- scoped_ptr<base::DictionaryValue> throttle_state(new base::DictionaryValue);
-
+void PixelBufferRasterWorkerPool::ThrottleStateAsValueInto(
+ base::debug::TracedValue* throttle_state) const {
throttle_state->SetInteger("bytes_available_for_upload",
max_bytes_pending_upload_ - bytes_pending_upload_);
throttle_state->SetInteger("bytes_pending_upload", bytes_pending_upload_);
throttle_state->SetInteger("scheduled_raster_task_count",
scheduled_raster_task_count_);
- return throttle_state.PassAs<base::Value>();
}
} // namespace cc
diff --git a/cc/resources/pixel_buffer_raster_worker_pool.h b/cc/resources/pixel_buffer_raster_worker_pool.h
index aa1a345..d4fc088 100644
--- a/cc/resources/pixel_buffer_raster_worker_pool.h
+++ b/cc/resources/pixel_buffer_raster_worker_pool.h
@@ -15,6 +15,13 @@
#include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
+namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+class TracedValue;
+}
+}
+
namespace cc {
class ResourceProvider;
@@ -90,8 +97,8 @@ class CC_EXPORT PixelBufferRasterWorkerPool : public RasterWorkerPool,
void CheckForCompletedRasterizerTasks();
const char* StateName() const;
- scoped_ptr<base::Value> StateAsValue() const;
- scoped_ptr<base::Value> ThrottleStateAsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const;
+ void ThrottleStateAsValueInto(base::debug::TracedValue* throttle_state) const;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
TaskGraphRunner* task_graph_runner_;
diff --git a/cc/resources/raster_mode.cc b/cc/resources/raster_mode.cc
index 5da8ee7..d67fdd8 100644
--- a/cc/resources/raster_mode.cc
+++ b/cc/resources/raster_mode.cc
@@ -10,18 +10,15 @@
namespace cc {
-scoped_ptr<base::Value> RasterModeAsValue(RasterMode raster_mode) {
+std::string RasterModeToString(RasterMode raster_mode) {
switch (raster_mode) {
case HIGH_QUALITY_RASTER_MODE:
- return scoped_ptr<base::Value>(
- new base::StringValue("HIGH_QUALITY_RASTER_MODE"));
+ return "HIGH_QUALITY_RASTER_MODE";
case LOW_QUALITY_RASTER_MODE:
- return scoped_ptr<base::Value>(
- new base::StringValue("LOW_QUALITY_RASTER_MODE"));
+ return "LOW_QUALITY_RASTER_MODE";
default:
NOTREACHED() << "Unrecognized RasterMode value " << raster_mode;
- return scoped_ptr<base::Value>(
- new base::StringValue("<unknown RasterMode value>"));
+ return "<unknown RasterMode value>";
}
}
diff --git a/cc/resources/raster_mode.h b/cc/resources/raster_mode.h
index 0a2b4c9..ec9ec27 100644
--- a/cc/resources/raster_mode.h
+++ b/cc/resources/raster_mode.h
@@ -5,6 +5,8 @@
#ifndef CC_RESOURCES_RASTER_MODE_H_
#define CC_RESOURCES_RASTER_MODE_H_
+#include <string>
+
#include "base/memory/scoped_ptr.h"
namespace base {
@@ -21,7 +23,7 @@ enum RasterMode {
NUM_RASTER_MODES = 2
};
-scoped_ptr<base::Value> RasterModeAsValue(RasterMode mode);
+std::string RasterModeToString(RasterMode mode);
} // namespace cc
diff --git a/cc/resources/tile.cc b/cc/resources/tile.cc
index 48a10db..2725a93 100644
--- a/cc/resources/tile.cc
+++ b/cc/resources/tile.cc
@@ -6,6 +6,7 @@
#include <algorithm>
+#include "base/debug/trace_event_argument.h"
#include "cc/base/math_util.h"
#include "cc/debug/traced_value.h"
#include "cc/resources/tile_manager.h"
@@ -61,20 +62,31 @@ void Tile::MarkRequiredForActivation() {
tile_manager_->DidChangeTilePriority(this);
}
-scoped_ptr<base::Value> Tile::AsValue() const {
- scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
+void Tile::AsValueInto(base::debug::TracedValue* res) const {
TracedValue::MakeDictIntoImplicitSnapshotWithCategory(
- TRACE_DISABLED_BY_DEFAULT("cc.debug"), res.get(), "cc::Tile", this);
- res->Set("picture_pile",
- TracedValue::CreateIDRef(picture_pile_.get()).release());
+ TRACE_DISABLED_BY_DEFAULT("cc.debug"), res, "cc::Tile", this);
+ TracedValue::SetIDRef(picture_pile_.get(), res, "picture_pile");
res->SetDouble("contents_scale", contents_scale_);
- res->Set("content_rect", MathUtil::AsValue(content_rect_).release());
+
+ res->BeginArray("content_rect");
+ MathUtil::AddToTracedValue(content_rect_, res);
+ res->EndArray();
+
res->SetInteger("layer_id", layer_id_);
- res->Set("active_priority", priority_[ACTIVE_TREE].AsValue().release());
- res->Set("pending_priority", priority_[PENDING_TREE].AsValue().release());
- res->Set("managed_state", managed_state_.AsValue().release());
+
+ res->BeginDictionary("active_priority");
+ priority_[ACTIVE_TREE].AsValueInto(res);
+ res->EndDictionary();
+
+ res->BeginDictionary("pending_priority");
+ priority_[PENDING_TREE].AsValueInto(res);
+ res->EndDictionary();
+
+ res->BeginDictionary("managed_state");
+ managed_state_.AsValueInto(res);
+ res->EndDictionary();
+
res->SetBoolean("use_picture_analysis", use_picture_analysis());
- return res.PassAs<base::Value>();
}
size_t Tile::GPUMemoryUsageInBytes() const {
diff --git a/cc/resources/tile.h b/cc/resources/tile.h
index 9aeabfa..8d91446 100644
--- a/cc/resources/tile.h
+++ b/cc/resources/tile.h
@@ -103,7 +103,7 @@ class CC_EXPORT Tile : public RefCountedManaged<Tile> {
return false;
}
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
inline bool IsReadyToDraw() const {
for (int mode = 0; mode < NUM_RASTER_MODES; ++mode) {
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
index bf10d95..f6405bf 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -9,6 +9,7 @@
#include <string>
#include "base/bind.h"
+#include "base/debug/trace_event_argument.h"
#include "base/json/json_writer.h"
#include "base/logging.h"
#include "base/metrics/histogram.h"
@@ -336,12 +337,13 @@ inline ManagedTileBin BinFromTilePriority(const TilePriority& prio) {
RasterTaskCompletionStats::RasterTaskCompletionStats()
: completed_count(0u), canceled_count(0u) {}
-scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue(
- const RasterTaskCompletionStats& stats) {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats) {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
state->SetInteger("completed_count", stats.completed_count);
state->SetInteger("canceled_count", stats.canceled_count);
- return state.PassAs<base::Value>();
+ return state;
}
// static
@@ -667,7 +669,7 @@ void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) {
"DidManage",
TRACE_EVENT_SCOPE_THREAD,
"state",
- TracedValue::FromValue(BasicStateAsValue().release()));
+ BasicStateAsValue());
TRACE_COUNTER_ID1("cc",
"unused_memory_bytes",
@@ -687,8 +689,7 @@ bool TileManager::UpdateVisibleTiles() {
"DidUpdateVisibleTiles",
TRACE_EVENT_SCOPE_THREAD,
"stats",
- TracedValue::FromValue(RasterTaskCompletionStatsAsValue(
- update_visible_tiles_stats_).release()));
+ RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_));
update_visible_tiles_stats_ = RasterTaskCompletionStats();
bool did_initialize_visible_tile = did_initialize_visible_tile_;
@@ -696,19 +697,27 @@ bool TileManager::UpdateVisibleTiles() {
return did_initialize_visible_tile;
}
-scoped_ptr<base::Value> TileManager::BasicStateAsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- state->SetInteger("tile_count", tiles_.size());
- state->Set("global_state", global_state_.AsValue().release());
- return state.PassAs<base::Value>();
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+TileManager::BasicStateAsValue() const {
+ scoped_refptr<base::debug::TracedValue> value =
+ new base::debug::TracedValue();
+ BasicStateAsValueInto(value.get());
+ return value;
}
-scoped_ptr<base::Value> TileManager::AllTilesAsValue() const {
- scoped_ptr<base::ListValue> state(new base::ListValue());
- for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it)
- state->Append(it->second->AsValue().release());
+void TileManager::BasicStateAsValueInto(base::debug::TracedValue* state) const {
+ state->SetInteger("tile_count", tiles_.size());
+ state->BeginDictionary("global_state");
+ global_state_.AsValueInto(state);
+ state->EndDictionary();
+}
- return state.PassAs<base::Value>();
+void TileManager::AllTilesAsValueInto(base::debug::TracedValue* state) const {
+ for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
+ state->BeginDictionary();
+ it->second->AsValueInto(state);
+ state->EndDictionary();
+ }
}
void TileManager::AssignGpuMemoryToTiles(
diff --git a/cc/resources/tile_manager.h b/cc/resources/tile_manager.h
index 686d0d0..d4c549c 100644
--- a/cc/resources/tile_manager.h
+++ b/cc/resources/tile_manager.h
@@ -27,6 +27,13 @@
#include "cc/resources/resource_pool.h"
#include "cc/resources/tile.h"
+namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+class TracedValue;
+}
+}
+
namespace cc {
class PictureLayerImpl;
class ResourceProvider;
@@ -70,8 +77,8 @@ struct RasterTaskCompletionStats {
size_t completed_count;
size_t canceled_count;
};
-scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue(
- const RasterTaskCompletionStats& stats);
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+ RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats);
// This class manages tiles, deciding which should get rasterized and which
// should no longer have any memory assigned to them. Tile objects are "owned"
@@ -102,8 +109,10 @@ class CC_EXPORT TileManager : public RasterizerClient,
int source_frame_number,
int flags);
- scoped_ptr<base::Value> BasicStateAsValue() const;
- scoped_ptr<base::Value> AllTilesAsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> BasicStateAsValue()
+ const;
+ void BasicStateAsValueInto(base::debug::TracedValue* dict) const;
+ void AllTilesAsValueInto(base::debug::TracedValue* array) const;
const MemoryHistory::Entry& memory_stats_from_last_assign() const {
return memory_stats_from_last_assign_;
}
diff --git a/cc/resources/tile_priority.cc b/cc/resources/tile_priority.cc
index 18678d2..26826af 100644
--- a/cc/resources/tile_priority.cc
+++ b/cc/resources/tile_priority.cc
@@ -4,110 +4,95 @@
#include "cc/resources/tile_priority.h"
+#include "base/debug/trace_event_argument.h"
#include "base/values.h"
#include "cc/base/math_util.h"
namespace cc {
-scoped_ptr<base::Value> WhichTreeAsValue(WhichTree tree) {
+std::string WhichTreeToString(WhichTree tree) {
switch (tree) {
case ACTIVE_TREE:
- return scoped_ptr<base::Value>(new base::StringValue("ACTIVE_TREE"));
+ return "ACTIVE_TREE";
case PENDING_TREE:
- return scoped_ptr<base::Value>(new base::StringValue("PENDING_TREE"));
+ return "PENDING_TREE";
default:
DCHECK(false) << "Unrecognized WhichTree value " << tree;
- return scoped_ptr<base::Value>(new base::StringValue(
- "<unknown WhichTree value>"));
+ return "<unknown WhichTree value>";
}
}
-scoped_ptr<base::Value> TileResolutionAsValue(
- TileResolution resolution) {
+std::string TileResolutionToString(TileResolution resolution) {
switch (resolution) {
case LOW_RESOLUTION:
- return scoped_ptr<base::Value>(new base::StringValue("LOW_RESOLUTION"));
+ return "LOW_RESOLUTION";
case HIGH_RESOLUTION:
- return scoped_ptr<base::Value>(new base::StringValue("HIGH_RESOLUTION"));
+ return "HIGH_RESOLUTION";
case NON_IDEAL_RESOLUTION:
- return scoped_ptr<base::Value>(new base::StringValue(
- "NON_IDEAL_RESOLUTION"));
+ return "NON_IDEAL_RESOLUTION";
}
DCHECK(false) << "Unrecognized TileResolution value " << resolution;
- return scoped_ptr<base::Value>(new base::StringValue(
- "<unknown TileResolution value>"));
+ return "<unknown TileResolution value>";
}
-scoped_ptr<base::Value> TilePriorityBinAsValue(TilePriority::PriorityBin bin) {
+std::string TilePriorityBinToString(TilePriority::PriorityBin bin) {
switch (bin) {
case TilePriority::NOW:
- return scoped_ptr<base::Value>(new base::StringValue("NOW"));
+ return "NOW";
case TilePriority::SOON:
- return scoped_ptr<base::Value>(new base::StringValue("SOON"));
+ return "SOON";
case TilePriority::EVENTUALLY:
- return scoped_ptr<base::Value>(new base::StringValue("EVENTUALLY"));
+ return "EVENTUALLY";
}
DCHECK(false) << "Unrecognized TilePriority::PriorityBin value " << bin;
- return scoped_ptr<base::Value>(
- new base::StringValue("<unknown TilePriority::PriorityBin value>"));
+ return "<unknown TilePriority::PriorityBin value>";
}
-scoped_ptr<base::Value> TilePriority::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- state->Set("resolution", TileResolutionAsValue(resolution).release());
- state->Set("priority_bin", TilePriorityBinAsValue(priority_bin).release());
- state->Set("distance_to_visible",
- MathUtil::AsValueSafely(distance_to_visible).release());
- return state.PassAs<base::Value>();
+void TilePriority::AsValueInto(base::debug::TracedValue* state) const {
+ state->SetString("resolution", TileResolutionToString(resolution));
+ state->SetString("priority_bin", TilePriorityBinToString(priority_bin));
+ state->SetDouble("distance_to_visible",
+ MathUtil::AsDoubleSafely(distance_to_visible));
}
-scoped_ptr<base::Value> TileMemoryLimitPolicyAsValue(
- TileMemoryLimitPolicy policy) {
+std::string TileMemoryLimitPolicyToString(TileMemoryLimitPolicy policy) {
switch (policy) {
case ALLOW_NOTHING:
- return scoped_ptr<base::Value>(new base::StringValue("ALLOW_NOTHING"));
+ return "ALLOW_NOTHING";
case ALLOW_ABSOLUTE_MINIMUM:
- return scoped_ptr<base::Value>(new base::StringValue(
- "ALLOW_ABSOLUTE_MINIMUM"));
+ return "ALLOW_ABSOLUTE_MINIMUM";
case ALLOW_PREPAINT_ONLY:
- return scoped_ptr<base::Value>(new base::StringValue(
- "ALLOW_PREPAINT_ONLY"));
+ return "ALLOW_PREPAINT_ONLY";
case ALLOW_ANYTHING:
- return scoped_ptr<base::Value>(new base::StringValue(
- "ALLOW_ANYTHING"));
+ return "ALLOW_ANYTHING";
default:
DCHECK(false) << "Unrecognized policy value";
- return scoped_ptr<base::Value>(new base::StringValue(
- "<unknown>"));
+ return "<unknown>";
}
}
-scoped_ptr<base::Value> TreePriorityAsValue(TreePriority prio) {
+std::string TreePriorityToString(TreePriority prio) {
switch (prio) {
case SAME_PRIORITY_FOR_BOTH_TREES:
- return scoped_ptr<base::Value>(new base::StringValue(
- "SAME_PRIORITY_FOR_BOTH_TREES"));
+ return "SAME_PRIORITY_FOR_BOTH_TREES";
case SMOOTHNESS_TAKES_PRIORITY:
- return scoped_ptr<base::Value>(new base::StringValue(
- "SMOOTHNESS_TAKES_PRIORITY"));
+ return "SMOOTHNESS_TAKES_PRIORITY";
case NEW_CONTENT_TAKES_PRIORITY:
- return scoped_ptr<base::Value>(new base::StringValue(
- "NEW_CONTENT_TAKES_PRIORITY"));
+ return "NEW_CONTENT_TAKES_PRIORITY";
default:
DCHECK(false) << "Unrecognized priority value " << prio;
- return scoped_ptr<base::Value>(new base::StringValue("<unknown>"));
+ return "<unknown>";
}
}
-scoped_ptr<base::Value> GlobalStateThatImpactsTilePriority::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- state->Set("memory_limit_policy",
- TileMemoryLimitPolicyAsValue(memory_limit_policy).release());
+void GlobalStateThatImpactsTilePriority::AsValueInto(
+ base::debug::TracedValue* state) const {
+ state->SetString("memory_limit_policy",
+ TileMemoryLimitPolicyToString(memory_limit_policy));
state->SetInteger("soft_memory_limit_in_bytes", soft_memory_limit_in_bytes);
state->SetInteger("hard_memory_limit_in_bytes", hard_memory_limit_in_bytes);
state->SetInteger("num_resources_limit", num_resources_limit);
- state->Set("tree_priority", TreePriorityAsValue(tree_priority).release());
- return state.PassAs<base::Value>();
+ state->SetString("tree_priority", TreePriorityToString(tree_priority));
}
} // namespace cc
diff --git a/cc/resources/tile_priority.h b/cc/resources/tile_priority.h
index a0903f1..02aadae 100644
--- a/cc/resources/tile_priority.h
+++ b/cc/resources/tile_priority.h
@@ -7,6 +7,7 @@
#include <algorithm>
#include <limits>
+#include <string>
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
@@ -29,16 +30,14 @@ enum WhichTree {
NUM_TREES = 2
// Be sure to update WhichTreeAsValue when adding new fields.
};
-scoped_ptr<base::Value> WhichTreeAsValue(
- WhichTree tree);
+scoped_ptr<base::Value> WhichTreeAsValue(WhichTree tree);
enum TileResolution {
LOW_RESOLUTION = 0 ,
HIGH_RESOLUTION = 1,
NON_IDEAL_RESOLUTION = 2,
};
-scoped_ptr<base::Value> TileResolutionAsValue(
- TileResolution resolution);
+std::string TileResolutionToString(TileResolution resolution);
struct CC_EXPORT TilePriority {
enum PriorityBin { NOW, SOON, EVENTUALLY };
@@ -83,7 +82,7 @@ struct CC_EXPORT TilePriority {
}
}
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
bool operator ==(const TilePriority& other) const {
return resolution == other.resolution &&
@@ -108,7 +107,7 @@ struct CC_EXPORT TilePriority {
float distance_to_visible;
};
-scoped_ptr<base::Value> TilePriorityBinAsValue(TilePriority::PriorityBin bin);
+std::string TilePriorityBinToString(TilePriority::PriorityBin bin);
enum TileMemoryLimitPolicy {
// Nothing.
@@ -128,8 +127,7 @@ enum TileMemoryLimitPolicy {
// NOTE: Be sure to update TreePriorityAsValue and kBinPolicyMap when adding
// or reordering fields.
};
-scoped_ptr<base::Value> TileMemoryLimitPolicyAsValue(
- TileMemoryLimitPolicy policy);
+std::string TileMemoryLimitPolicyToString(TileMemoryLimitPolicy policy);
enum TreePriority {
SAME_PRIORITY_FOR_BOTH_TREES,
@@ -138,7 +136,7 @@ enum TreePriority {
NUM_TREE_PRIORITIES
// Be sure to update TreePriorityAsValue when adding new fields.
};
-scoped_ptr<base::Value> TreePriorityAsValue(TreePriority prio);
+std::string TreePriorityToString(TreePriority prio);
class GlobalStateThatImpactsTilePriority {
public:
@@ -168,7 +166,7 @@ class GlobalStateThatImpactsTilePriority {
return !(*this == other);
}
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
};
} // namespace cc
diff --git a/cc/scheduler/delay_based_time_source.cc b/cc/scheduler/delay_based_time_source.cc
index 2be3d3d..cd214fd 100644
--- a/cc/scheduler/delay_based_time_source.cc
+++ b/cc/scheduler/delay_based_time_source.cc
@@ -10,6 +10,7 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/location.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h"
@@ -289,31 +290,25 @@ std::string DelayBasedTimeSourceHighRes::TypeString() const {
return "DelayBasedTimeSourceHighRes";
}
-scoped_ptr<base::Value> DelayBasedTimeSource::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+void DelayBasedTimeSource::AsValueInto(base::debug::TracedValue* state) const {
state->SetString("type", TypeString());
state->SetDouble("last_tick_time_us", LastTickTime().ToInternalValue());
state->SetDouble("next_tick_time_us", NextTickTime().ToInternalValue());
- scoped_ptr<base::DictionaryValue> state_current_parameters(
- new base::DictionaryValue);
- state_current_parameters->SetDouble(
- "interval_us", current_parameters_.interval.InMicroseconds());
- state_current_parameters->SetDouble(
- "tick_target_us", current_parameters_.tick_target.ToInternalValue());
- state->Set("current_parameters", state_current_parameters.release());
-
- scoped_ptr<base::DictionaryValue> state_next_parameters(
- new base::DictionaryValue);
- state_next_parameters->SetDouble("interval_us",
- next_parameters_.interval.InMicroseconds());
- state_next_parameters->SetDouble(
- "tick_target_us", next_parameters_.tick_target.ToInternalValue());
- state->Set("next_parameters", state_next_parameters.release());
+ state->BeginDictionary("current_parameters");
+ state->SetDouble("interval_us",
+ current_parameters_.interval.InMicroseconds());
+ state->SetDouble("tick_target_us",
+ current_parameters_.tick_target.ToInternalValue());
+ state->EndDictionary();
- state->SetBoolean("active", active_);
+ state->BeginDictionary("next_parameters");
+ state->SetDouble("interval_us", next_parameters_.interval.InMicroseconds());
+ state->SetDouble("tick_target_us",
+ next_parameters_.tick_target.ToInternalValue());
+ state->EndDictionary();
- return state.PassAs<base::Value>();
+ state->SetBoolean("active", active_);
}
} // namespace cc
diff --git a/cc/scheduler/delay_based_time_source.h b/cc/scheduler/delay_based_time_source.h
index 18c8002..e503bdf 100644
--- a/cc/scheduler/delay_based_time_source.h
+++ b/cc/scheduler/delay_based_time_source.h
@@ -11,7 +11,12 @@
#include "base/values.h"
#include "cc/base/cc_export.h"
-namespace base { class SingleThreadTaskRunner; }
+namespace base {
+namespace debug {
+class TracedValue;
+}
+class SingleThreadTaskRunner;
+}
namespace cc {
@@ -49,7 +54,7 @@ class CC_EXPORT DelayBasedTimeSource
// Virtual for testing.
virtual base::TimeTicks Now() const;
- virtual scoped_ptr<base::Value> AsValue() const;
+ virtual void AsValueInto(base::debug::TracedValue* dict) const;
protected:
DelayBasedTimeSource(base::TimeDelta interval,
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 52e0f9e..1451237 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include "base/auto_reset.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h"
#include "cc/debug/devtools_instrumentation.h"
@@ -61,8 +62,9 @@ void Scheduler::SyntheticBeginFrameSource::OnTimerTick() {
scheduler_->BeginFrame(begin_frame_args);
}
-scoped_ptr<base::Value> Scheduler::SyntheticBeginFrameSource::AsValue() const {
- return time_source_->AsValue();
+void Scheduler::SyntheticBeginFrameSource::AsValueInto(
+ base::debug::TracedValue* state) const {
+ time_source_->AsValueInto(state);
}
BeginFrameArgs
@@ -93,7 +95,7 @@ Scheduler::Scheduler(
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"),
"Scheduler::Scheduler",
"settings",
- ToTrace(settings_));
+ settings_.AsValue());
DCHECK(client_);
DCHECK(!state_machine_.BeginFrameNeeded());
if (settings_.main_frame_before_activation_enabled) {
@@ -399,7 +401,7 @@ void Scheduler::SetupPollingMechanisms(bool needs_begin_frame) {
// If the scheduler is busy, we queue the BeginFrame to be handled later as
// a BeginRetroFrame.
void Scheduler::BeginFrame(const BeginFrameArgs& args) {
- TRACE_EVENT1("cc", "Scheduler::BeginFrame", "args", ToTrace(args));
+ TRACE_EVENT1("cc", "Scheduler::BeginFrame", "args", args.AsValue());
DCHECK(settings_.throttle_frame_production);
BeginFrameArgs adjusted_args(args);
@@ -496,7 +498,7 @@ void Scheduler::PostBeginRetroFrameIfNeeded() {
// for a BeginMainFrame+activation to complete before it times out and draws
// any asynchronous animation and scroll/pinch updates.
void Scheduler::BeginImplFrame(const BeginFrameArgs& args) {
- TRACE_EVENT1("cc", "Scheduler::BeginImplFrame", "args", ToTrace(args));
+ TRACE_EVENT1("cc", "Scheduler::BeginImplFrame", "args", args.AsValue());
DCHECK(state_machine_.begin_impl_frame_state() ==
SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_IDLE);
DCHECK(state_machine_.HasInitializedOutputSurface());
@@ -626,7 +628,7 @@ void Scheduler::ProcessScheduledActions() {
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"),
"SchedulerStateMachine",
"state",
- ToTrace(this));
+ AsValue());
state_machine_.UpdateState(action);
base::AutoReset<SchedulerStateMachine::Action>
mark_inside_action(&inside_action_, action);
@@ -680,51 +682,54 @@ bool Scheduler::WillDrawIfNeeded() const {
return !state_machine_.PendingDrawsShouldBeAborted();
}
-scoped_ptr<base::Value> Scheduler::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
- state->Set("state_machine", state_machine_.AsValue().release());
- if (synthetic_begin_frame_source_)
- state->Set("synthetic_begin_frame_source_",
- synthetic_begin_frame_source_->AsValue().release());
+scoped_refptr<base::debug::ConvertableToTraceFormat> Scheduler::AsValue()
+ const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
+ state->BeginDictionary("state_machine");
+ state_machine_.AsValueInto(state);
+ state->EndDictionary();
+ if (synthetic_begin_frame_source_) {
+ state->BeginDictionary("synthetic_begin_frame_source_");
+ synthetic_begin_frame_source_->AsValueInto(state);
+ state->EndDictionary();
+ }
- scoped_ptr<base::DictionaryValue> scheduler_state(new base::DictionaryValue);
- scheduler_state->SetDouble(
+ state->BeginDictionary("scheduler_state");
+ state->SetDouble(
"time_until_anticipated_draw_time_ms",
(AnticipatedDrawTime() - base::TimeTicks::Now()).InMillisecondsF());
- scheduler_state->SetDouble("vsync_interval_ms",
- vsync_interval_.InMillisecondsF());
- scheduler_state->SetDouble("estimated_parent_draw_time_ms",
- estimated_parent_draw_time_.InMillisecondsF());
- scheduler_state->SetBoolean("last_set_needs_begin_frame_",
- last_set_needs_begin_frame_);
- scheduler_state->SetBoolean("begin_unthrottled_frame_posted_",
- begin_unthrottled_frame_posted_);
- scheduler_state->SetBoolean("begin_retro_frame_posted_",
- begin_retro_frame_posted_);
- scheduler_state->SetInteger("begin_retro_frame_args_",
- begin_retro_frame_args_.size());
- scheduler_state->SetBoolean("begin_impl_frame_deadline_task_",
- !begin_impl_frame_deadline_task_.IsCancelled());
- scheduler_state->SetBoolean("poll_for_draw_triggers_task_",
- !poll_for_draw_triggers_task_.IsCancelled());
- scheduler_state->SetBoolean("advance_commit_state_task_",
- !advance_commit_state_task_.IsCancelled());
- scheduler_state->Set("begin_impl_frame_args",
- begin_impl_frame_args_.AsValue().release());
-
- state->Set("scheduler_state", scheduler_state.release());
-
- scoped_ptr<base::DictionaryValue> client_state(new base::DictionaryValue);
- client_state->SetDouble("draw_duration_estimate_ms",
- client_->DrawDurationEstimate().InMillisecondsF());
- client_state->SetDouble(
+ state->SetDouble("vsync_interval_ms", vsync_interval_.InMillisecondsF());
+ state->SetDouble("estimated_parent_draw_time_ms",
+ estimated_parent_draw_time_.InMillisecondsF());
+ state->SetBoolean("last_set_needs_begin_frame_", last_set_needs_begin_frame_);
+ state->SetBoolean("begin_unthrottled_frame_posted_",
+ begin_unthrottled_frame_posted_);
+ state->SetBoolean("begin_retro_frame_posted_", begin_retro_frame_posted_);
+ state->SetInteger("begin_retro_frame_args_", begin_retro_frame_args_.size());
+ state->SetBoolean("begin_impl_frame_deadline_task_",
+ !begin_impl_frame_deadline_task_.IsCancelled());
+ state->SetBoolean("poll_for_draw_triggers_task_",
+ !poll_for_draw_triggers_task_.IsCancelled());
+ state->SetBoolean("advance_commit_state_task_",
+ !advance_commit_state_task_.IsCancelled());
+ state->BeginDictionary("begin_impl_frame_args");
+ begin_impl_frame_args_.AsValueInto(state);
+ state->EndDictionary();
+
+ state->EndDictionary();
+
+ state->BeginDictionary("client_state");
+ state->SetDouble("draw_duration_estimate_ms",
+ client_->DrawDurationEstimate().InMillisecondsF());
+ state->SetDouble(
"begin_main_frame_to_commit_duration_estimate_ms",
client_->BeginMainFrameToCommitDurationEstimate().InMillisecondsF());
- client_state->SetDouble(
+ state->SetDouble(
"commit_to_activate_duration_estimate_ms",
client_->CommitToActivateDurationEstimate().InMillisecondsF());
- state->Set("client_state", client_state.release());
- return state.PassAs<base::Value>();
+ state->EndDictionary();
+ return state;
}
bool Scheduler::CanCommitAndActivateBeforeDeadline() const {
@@ -741,7 +746,7 @@ bool Scheduler::CanCommitAndActivateBeforeDeadline() const {
"time_left_after_drawing_ms",
(begin_impl_frame_args_.deadline - estimated_draw_time).InMillisecondsF(),
"state",
- ToTrace(this));
+ AsValue());
return estimated_draw_time < begin_impl_frame_args_.deadline;
}
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h
index 3653c30..afb9e9d 100644
--- a/cc/scheduler/scheduler.h
+++ b/cc/scheduler/scheduler.h
@@ -20,6 +20,9 @@
#include "cc/scheduler/scheduler_state_machine.h"
namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+}
class SingleThreadTaskRunner;
}
@@ -129,7 +132,7 @@ class CC_EXPORT Scheduler {
void PollForAnticipatedDrawTriggers();
void PollToAdvanceCommitState();
- scoped_ptr<base::Value> AsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
bool IsInsideAction(SchedulerStateMachine::Action action) {
return inside_action_ == action;
@@ -161,7 +164,7 @@ class CC_EXPORT Scheduler {
// TimeSourceClient implementation of OnTimerTick triggers a BeginFrame.
virtual void OnTimerTick() OVERRIDE;
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
private:
BeginFrameArgs CreateSyntheticBeginFrameArgs(base::TimeTicks frame_time);
diff --git a/cc/scheduler/scheduler_settings.cc b/cc/scheduler/scheduler_settings.cc
index f1bf60e..ea714e3 100644
--- a/cc/scheduler/scheduler_settings.cc
+++ b/cc/scheduler/scheduler_settings.cc
@@ -4,6 +4,7 @@
#include "cc/scheduler/scheduler_settings.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/trees/layer_tree_settings.h"
namespace cc {
@@ -36,8 +37,10 @@ SchedulerSettings::SchedulerSettings(const LayerTreeSettings& settings)
SchedulerSettings::~SchedulerSettings() {}
-scoped_ptr<base::Value> SchedulerSettings::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+SchedulerSettings::AsValue() const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
state->SetBoolean("begin_frame_scheduling_enabled",
begin_frame_scheduling_enabled);
state->SetBoolean("main_frame_before_draw_enabled",
@@ -52,7 +55,7 @@ scoped_ptr<base::Value> SchedulerSettings::AsValue() const {
state->SetBoolean("using_synchronous_renderer_compositor",
using_synchronous_renderer_compositor);
state->SetBoolean("throttle_frame_production", throttle_frame_production);
- return state.PassAs<base::Value>();
+ return state;
}
} // namespace cc
diff --git a/cc/scheduler/scheduler_settings.h b/cc/scheduler/scheduler_settings.h
index c282cf6..65d29c8 100644
--- a/cc/scheduler/scheduler_settings.h
+++ b/cc/scheduler/scheduler_settings.h
@@ -5,10 +5,16 @@
#ifndef CC_SCHEDULER_SCHEDULER_SETTINGS_H_
#define CC_SCHEDULER_SCHEDULER_SETTINGS_H_
-#include "base/memory/scoped_ptr.h"
+#include "base/memory/ref_counted.h"
#include "base/values.h"
#include "cc/base/cc_export.h"
+namespace base {
+namespace debug {
+class ConvertableToTraceFormat;
+}
+}
+
namespace cc {
class LayerTreeSettings;
@@ -27,7 +33,7 @@ class CC_EXPORT SchedulerSettings {
bool using_synchronous_renderer_compositor;
bool throttle_frame_production;
- scoped_ptr<base::Value> AsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
};
} // namespace cc
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index 7070c7a..a37a74a 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -5,6 +5,7 @@
#include "cc/scheduler/scheduler_state_machine.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/format_macros.h"
#include "base/logging.h"
#include "base/strings/stringprintf.h"
@@ -147,98 +148,96 @@ const char* SchedulerStateMachine::ActionToString(Action action) {
return "???";
}
-scoped_ptr<base::Value> SchedulerStateMachine::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
-
- scoped_ptr<base::DictionaryValue> major_state(new base::DictionaryValue);
- major_state->SetString("next_action", ActionToString(NextAction()));
- major_state->SetString("begin_impl_frame_state",
- BeginImplFrameStateToString(begin_impl_frame_state_));
- major_state->SetString("commit_state", CommitStateToString(commit_state_));
- major_state->SetString("output_surface_state_",
- OutputSurfaceStateToString(output_surface_state_));
- major_state->SetString(
- "forced_redraw_state",
- ForcedRedrawOnTimeoutStateToString(forced_redraw_state_));
- state->Set("major_state", major_state.release());
-
- scoped_ptr<base::DictionaryValue> timestamps_state(new base::DictionaryValue);
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+SchedulerStateMachine::AsValue() const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
+ AsValueInto(state);
+ return state;
+}
+
+void SchedulerStateMachine::AsValueInto(base::debug::TracedValue* state) const {
+ state->BeginDictionary("major_state");
+ state->SetString("next_action", ActionToString(NextAction()));
+ state->SetString("begin_impl_frame_state",
+ BeginImplFrameStateToString(begin_impl_frame_state_));
+ state->SetString("commit_state", CommitStateToString(commit_state_));
+ state->SetString("output_surface_state_",
+ OutputSurfaceStateToString(output_surface_state_));
+ state->SetString("forced_redraw_state",
+ ForcedRedrawOnTimeoutStateToString(forced_redraw_state_));
+ state->EndDictionary();
+
+ state->BeginDictionary("major_timestamps_in_ms");
base::TimeTicks now = gfx::FrameTime::Now();
- timestamps_state->SetDouble(
- "0_interval", begin_impl_frame_args_.interval.InMicroseconds() / 1000.0L);
- timestamps_state->SetDouble(
+ state->SetDouble("0_interval",
+ begin_impl_frame_args_.interval.InMicroseconds() / 1000.0L);
+ state->SetDouble(
"1_now_to_deadline",
(begin_impl_frame_args_.deadline - now).InMicroseconds() / 1000.0L);
- timestamps_state->SetDouble(
+ state->SetDouble(
"2_frame_time_to_now",
(now - begin_impl_frame_args_.frame_time).InMicroseconds() / 1000.0L);
- timestamps_state->SetDouble(
- "3_frame_time_to_deadline",
- (begin_impl_frame_args_.deadline - begin_impl_frame_args_.frame_time)
- .InMicroseconds() /
- 1000.0L);
- timestamps_state->SetDouble(
- "4_now", (now - base::TimeTicks()).InMicroseconds() / 1000.0L);
- timestamps_state->SetDouble(
+ state->SetDouble("3_frame_time_to_deadline",
+ (begin_impl_frame_args_.deadline -
+ begin_impl_frame_args_.frame_time).InMicroseconds() /
+ 1000.0L);
+ state->SetDouble("4_now",
+ (now - base::TimeTicks()).InMicroseconds() / 1000.0L);
+ state->SetDouble(
"5_frame_time",
(begin_impl_frame_args_.frame_time - base::TimeTicks()).InMicroseconds() /
1000.0L);
- timestamps_state->SetDouble(
+ state->SetDouble(
"6_deadline",
(begin_impl_frame_args_.deadline - base::TimeTicks()).InMicroseconds() /
1000.0L);
- state->Set("major_timestamps_in_ms", timestamps_state.release());
-
- scoped_ptr<base::DictionaryValue> minor_state(new base::DictionaryValue);
- minor_state->SetInteger("commit_count", commit_count_);
- minor_state->SetInteger("current_frame_number", current_frame_number_);
-
- minor_state->SetInteger("last_frame_number_animate_performed",
- last_frame_number_animate_performed_);
- minor_state->SetInteger("last_frame_number_swap_performed",
- last_frame_number_swap_performed_);
- minor_state->SetInteger("last_frame_number_swap_requested",
- last_frame_number_swap_requested_);
- minor_state->SetInteger(
- "last_frame_number_begin_main_frame_sent",
- last_frame_number_begin_main_frame_sent_);
- minor_state->SetInteger(
- "last_frame_number_update_visible_tiles_was_called",
- last_frame_number_update_visible_tiles_was_called_);
-
- minor_state->SetInteger("manage_tiles_funnel", manage_tiles_funnel_);
- minor_state->SetInteger("consecutive_checkerboard_animations",
- consecutive_checkerboard_animations_);
- minor_state->SetInteger("max_pending_swaps_", max_pending_swaps_);
- minor_state->SetInteger("pending_swaps_", pending_swaps_);
- minor_state->SetBoolean("needs_redraw", needs_redraw_);
- minor_state->SetBoolean("needs_animate_", needs_animate_);
- minor_state->SetBoolean("needs_manage_tiles", needs_manage_tiles_);
- minor_state->SetBoolean("swap_used_incomplete_tile",
- swap_used_incomplete_tile_);
- minor_state->SetBoolean("needs_commit", needs_commit_);
- minor_state->SetBoolean("visible", visible_);
- minor_state->SetBoolean("can_start", can_start_);
- minor_state->SetBoolean("can_draw", can_draw_);
- minor_state->SetBoolean("has_pending_tree", has_pending_tree_);
- minor_state->SetBoolean("pending_tree_is_ready_for_activation",
- pending_tree_is_ready_for_activation_);
- minor_state->SetBoolean("active_tree_needs_first_draw",
- active_tree_needs_first_draw_);
- minor_state->SetBoolean("did_create_and_initialize_first_output_surface",
- did_create_and_initialize_first_output_surface_);
- minor_state->SetBoolean("smoothness_takes_priority",
- smoothness_takes_priority_);
- minor_state->SetBoolean("main_thread_is_in_high_latency_mode",
- MainThreadIsInHighLatencyMode());
- minor_state->SetBoolean("skip_begin_main_frame_to_reduce_latency",
- skip_begin_main_frame_to_reduce_latency_);
- minor_state->SetBoolean("skip_next_begin_main_frame_to_reduce_latency",
- skip_next_begin_main_frame_to_reduce_latency_);
- minor_state->SetBoolean("continuous_painting", continuous_painting_);
- state->Set("minor_state", minor_state.release());
-
- return state.PassAs<base::Value>();
+ state->EndDictionary();
+
+ state->BeginDictionary("minor_state");
+ state->SetInteger("commit_count", commit_count_);
+ state->SetInteger("current_frame_number", current_frame_number_);
+
+ state->SetInteger("last_frame_number_animate_performed",
+ last_frame_number_animate_performed_);
+ state->SetInteger("last_frame_number_swap_performed",
+ last_frame_number_swap_performed_);
+ state->SetInteger("last_frame_number_swap_requested",
+ last_frame_number_swap_requested_);
+ state->SetInteger("last_frame_number_begin_main_frame_sent",
+ last_frame_number_begin_main_frame_sent_);
+ state->SetInteger("last_frame_number_update_visible_tiles_was_called",
+ last_frame_number_update_visible_tiles_was_called_);
+
+ state->SetInteger("manage_tiles_funnel", manage_tiles_funnel_);
+ state->SetInteger("consecutive_checkerboard_animations",
+ consecutive_checkerboard_animations_);
+ state->SetInteger("max_pending_swaps_", max_pending_swaps_);
+ state->SetInteger("pending_swaps_", pending_swaps_);
+ state->SetBoolean("needs_redraw", needs_redraw_);
+ state->SetBoolean("needs_animate_", needs_animate_);
+ state->SetBoolean("needs_manage_tiles", needs_manage_tiles_);
+ state->SetBoolean("swap_used_incomplete_tile", swap_used_incomplete_tile_);
+ state->SetBoolean("needs_commit", needs_commit_);
+ state->SetBoolean("visible", visible_);
+ state->SetBoolean("can_start", can_start_);
+ state->SetBoolean("can_draw", can_draw_);
+ state->SetBoolean("has_pending_tree", has_pending_tree_);
+ state->SetBoolean("pending_tree_is_ready_for_activation",
+ pending_tree_is_ready_for_activation_);
+ state->SetBoolean("active_tree_needs_first_draw",
+ active_tree_needs_first_draw_);
+ state->SetBoolean("did_create_and_initialize_first_output_surface",
+ did_create_and_initialize_first_output_surface_);
+ state->SetBoolean("smoothness_takes_priority", smoothness_takes_priority_);
+ state->SetBoolean("main_thread_is_in_high_latency_mode",
+ MainThreadIsInHighLatencyMode());
+ state->SetBoolean("skip_begin_main_frame_to_reduce_latency",
+ skip_begin_main_frame_to_reduce_latency_);
+ state->SetBoolean("skip_next_begin_main_frame_to_reduce_latency",
+ skip_next_begin_main_frame_to_reduce_latency_);
+ state->SetBoolean("continuous_painting", continuous_painting_);
+ state->EndDictionary();
}
void SchedulerStateMachine::AdvanceCurrentFrameNumber() {
@@ -810,26 +809,27 @@ bool SchedulerStateMachine::ProactiveBeginFrameWanted() const {
void SchedulerStateMachine::OnBeginImplFrame(const BeginFrameArgs& args) {
AdvanceCurrentFrameNumber();
begin_impl_frame_args_ = args;
- DCHECK_EQ(begin_impl_frame_state_, BEGIN_IMPL_FRAME_STATE_IDLE) << *AsValue();
+ DCHECK_EQ(begin_impl_frame_state_, BEGIN_IMPL_FRAME_STATE_IDLE)
+ << AsValue()->ToString();
begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING;
}
void SchedulerStateMachine::OnBeginImplFrameDeadlinePending() {
DCHECK_EQ(begin_impl_frame_state_,
BEGIN_IMPL_FRAME_STATE_BEGIN_FRAME_STARTING)
- << *AsValue();
+ << AsValue()->ToString();
begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME;
}
void SchedulerStateMachine::OnBeginImplFrameDeadline() {
DCHECK_EQ(begin_impl_frame_state_, BEGIN_IMPL_FRAME_STATE_INSIDE_BEGIN_FRAME)
- << *AsValue();
+ << AsValue()->ToString();
begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE;
}
void SchedulerStateMachine::OnBeginImplFrameIdle() {
DCHECK_EQ(begin_impl_frame_state_, BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE)
- << *AsValue();
+ << AsValue()->ToString();
begin_impl_frame_state_ = BEGIN_IMPL_FRAME_STATE_IDLE;
}
@@ -1009,7 +1009,8 @@ void SchedulerStateMachine::DidDrawIfPossibleCompleted(DrawResult result) {
void SchedulerStateMachine::SetNeedsCommit() { needs_commit_ = true; }
void SchedulerStateMachine::NotifyReadyToCommit() {
- DCHECK(commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED) << *AsValue();
+ DCHECK(commit_state_ == COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED)
+ << AsValue()->ToString();
commit_state_ = COMMIT_STATE_READY_TO_COMMIT;
}
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index 0fbdf41..d92a352f 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -16,6 +16,10 @@
#include "cc/scheduler/scheduler_settings.h"
namespace base {
+namespace debug {
+class ConvertableToTraceForamt;
+class TracedValue;
+}
class Value;
}
@@ -102,7 +106,8 @@ class CC_EXPORT SchedulerStateMachine {
};
static const char* ActionToString(Action action);
- scoped_ptr<base::Value> AsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
Action NextAction() const;
void UpdateState(Action action);
diff --git a/cc/scheduler/scheduler_state_machine_unittest.cc b/cc/scheduler/scheduler_state_machine_unittest.cc
index c89da2f..1dd9788 100644
--- a/cc/scheduler/scheduler_state_machine_unittest.cc
+++ b/cc/scheduler/scheduler_state_machine_unittest.cc
@@ -4,17 +4,18 @@
#include "cc/scheduler/scheduler_state_machine.h"
+#include "base/debug/trace_event.h"
#include "cc/scheduler/scheduler.h"
#include "cc/test/begin_frame_args_test.h"
#include "testing/gtest/include/gtest/gtest.h"
#define EXPECT_ACTION_UPDATE_STATE(action) \
- EXPECT_EQ(action, state.NextAction()) << *state.AsValue(); \
+ EXPECT_EQ(action, state.NextAction()) << state.AsValue()->ToString(); \
if (action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE || \
action == SchedulerStateMachine::ACTION_DRAW_AND_SWAP_FORCED) { \
EXPECT_EQ(SchedulerStateMachine::BEGIN_IMPL_FRAME_STATE_INSIDE_DEADLINE, \
state.begin_impl_frame_state()) \
- << *state.AsValue(); \
+ << state.AsValue()->ToString(); \
} \
state.UpdateState(action); \
if (action == SchedulerStateMachine::ACTION_NONE) { \
@@ -690,7 +691,7 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
state.SetNeedsCommit();
EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
state.NextAction())
- << *state.AsValue();
+ << state.AsValue()->ToString();
}
}
@@ -716,16 +717,18 @@ TEST(SchedulerStateMachineTest, TestNextActionDrawsOnBeginImplFrame) {
} else {
expected_action = SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE;
EXPECT_EQ(state.NextAction(), SchedulerStateMachine::ACTION_ANIMATE)
- << *state.AsValue();
+ << state.AsValue()->ToString();
state.UpdateState(state.NextAction());
}
// Case 1: needs_commit=false.
- EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue();
+ EXPECT_EQ(state.NextAction(), expected_action)
+ << state.AsValue()->ToString();
// Case 2: needs_commit=true.
state.SetNeedsCommit();
- EXPECT_EQ(state.NextAction(), expected_action) << *state.AsValue();
+ EXPECT_EQ(state.NextAction(), expected_action)
+ << state.AsValue()->ToString();
}
}
@@ -757,7 +760,7 @@ TEST(SchedulerStateMachineTest, TestNoCommitStatesRedrawWhenInvisible) {
state.SetNeedsCommit();
EXPECT_NE(SchedulerStateMachine::ACTION_DRAW_AND_SWAP_IF_POSSIBLE,
state.NextAction())
- << *state.AsValue();
+ << state.AsValue()->ToString();
}
}
}
@@ -1655,7 +1658,7 @@ TEST(SchedulerStateMachineTest, TestInitialActionsWhenContextLost) {
// main thread will just abort anyway.
state.SetVisible(false);
EXPECT_EQ(SchedulerStateMachine::ACTION_NONE, state.NextAction())
- << *state.AsValue();
+ << state.AsValue()->ToString();
}
TEST(SchedulerStateMachineTest, ReportIfNotDrawing) {
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index aa61af7..f416cec 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -6,6 +6,7 @@
#include <string>
#include <vector>
+#include "base/debug/trace_event.h"
#include "base/logging.h"
#include "base/memory/scoped_vector.h"
#include "base/message_loop/message_loop.h"
@@ -110,7 +111,7 @@ class FakeSchedulerClient : public SchedulerClient {
int num_draws() const { return num_draws_; }
int num_actions_() const { return static_cast<int>(actions_.size()); }
const char* Action(int i) const { return actions_[i]; }
- base::Value& StateForAction(int i) const { return *states_[i]; }
+ std::string StateForAction(int i) const { return states_[i]->ToString(); }
base::TimeTicks posted_begin_impl_frame_deadline() const {
return posted_begin_impl_frame_deadline_;
}
@@ -147,24 +148,24 @@ class FakeSchedulerClient : public SchedulerClient {
// SchedulerClient implementation.
virtual void SetNeedsBeginFrame(bool enable) OVERRIDE {
actions_.push_back("SetNeedsBeginFrame");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
needs_begin_frame_ = enable;
}
virtual void WillBeginImplFrame(const BeginFrameArgs& args) OVERRIDE {
actions_.push_back("WillBeginImplFrame");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual void ScheduledActionSendBeginMainFrame() OVERRIDE {
actions_.push_back("ScheduledActionSendBeginMainFrame");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual void ScheduledActionAnimate() OVERRIDE {
actions_.push_back("ScheduledActionAnimate");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual DrawResult ScheduledActionDrawAndSwapIfPossible() OVERRIDE {
actions_.push_back("ScheduledActionDrawAndSwapIfPossible");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
num_draws_++;
DrawResult result =
draw_will_happen_ ? DRAW_SUCCESS : DRAW_ABORTED_CHECKERBOARD_ANIMATIONS;
@@ -186,30 +187,30 @@ class FakeSchedulerClient : public SchedulerClient {
}
virtual DrawResult ScheduledActionDrawAndSwapForced() OVERRIDE {
actions_.push_back("ScheduledActionDrawAndSwapForced");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
return DRAW_SUCCESS;
}
virtual void ScheduledActionCommit() OVERRIDE {
actions_.push_back("ScheduledActionCommit");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual void ScheduledActionUpdateVisibleTiles() OVERRIDE {
actions_.push_back("ScheduledActionUpdateVisibleTiles");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
if (redraw_will_happen_if_update_visible_tiles_happens_)
scheduler_->SetNeedsRedraw();
}
virtual void ScheduledActionActivateSyncTree() OVERRIDE {
actions_.push_back("ScheduledActionActivateSyncTree");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual void ScheduledActionBeginOutputSurfaceCreation() OVERRIDE {
actions_.push_back("ScheduledActionBeginOutputSurfaceCreation");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual void ScheduledActionManageTiles() OVERRIDE {
actions_.push_back("ScheduledActionManageTiles");
- states_.push_back(scheduler_->AsValue().release());
+ states_.push_back(scheduler_->AsValue());
}
virtual void DidAnticipatedDrawTimeChange(base::TimeTicks) OVERRIDE {
if (log_anticipated_draw_time_change_)
@@ -238,7 +239,7 @@ class FakeSchedulerClient : public SchedulerClient {
bool redraw_will_happen_if_update_visible_tiles_happens_;
base::TimeTicks posted_begin_impl_frame_deadline_;
std::vector<const char*> actions_;
- ScopedVector<base::Value> states_;
+ std::vector<scoped_refptr<base::debug::ConvertableToTraceFormat> > states_;
scoped_ptr<TestScheduler> scheduler_;
scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
};
@@ -1167,7 +1168,7 @@ TEST(SchedulerTest, PollForCommitCompletion) {
for (int i = 0; i < 3; ++i) {
EXPECT_EQ((frame_args.interval * 2).InMicroseconds(),
client.task_runner().NextPendingTaskDelay().InMicroseconds())
- << *scheduler->AsValue();
+ << scheduler->AsValue()->ToString();
client.task_runner().RunPendingTasks();
EXPECT_GT(client.num_actions_(), actions_so_far);
EXPECT_STREQ(client.Action(client.num_actions_() - 1),
@@ -1180,7 +1181,7 @@ TEST(SchedulerTest, PollForCommitCompletion) {
for (int i = 0; i < 3; ++i) {
EXPECT_EQ((frame_args.interval * 2).InMicroseconds(),
client.task_runner().NextPendingTaskDelay().InMicroseconds())
- << *scheduler->AsValue();
+ << scheduler->AsValue()->ToString();
client.task_runner().RunPendingTasks();
EXPECT_GT(client.num_actions_(), actions_so_far);
EXPECT_STREQ(client.Action(client.num_actions_() - 1),
diff --git a/cc/test/fake_proxy.cc b/cc/test/fake_proxy.cc
index facf831..7d0ad47 100644
--- a/cc/test/fake_proxy.cc
+++ b/cc/test/fake_proxy.cc
@@ -36,9 +36,7 @@ bool FakeProxy::SupportsImplScrolling() const { return false; }
bool FakeProxy::CommitPendingForTesting() { return false; }
-scoped_ptr<base::Value> FakeProxy::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- return state.PassAs<base::Value>();
+void FakeProxy::AsValueInto(base::debug::TracedValue*) const {
}
} // namespace cc
diff --git a/cc/test/fake_proxy.h b/cc/test/fake_proxy.h
index 2a700906..dc04c70 100644
--- a/cc/test/fake_proxy.h
+++ b/cc/test/fake_proxy.h
@@ -43,7 +43,7 @@ class FakeProxy : public Proxy {
virtual bool SupportsImplScrolling() const OVERRIDE;
virtual void SetDebugState(const LayerTreeDebugState& debug_state) OVERRIDE {}
virtual bool CommitPendingForTesting() OVERRIDE;
- virtual scoped_ptr<base::Value> AsValue() const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* state) const OVERRIDE;
virtual RendererCapabilities& GetRendererCapabilities();
void SetMaxPartialTextureUpdates(size_t max);
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index 2ef991c..ed7472d 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -12,6 +12,7 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
#include "base/stl_util.h"
@@ -1153,10 +1154,10 @@ void LayerTreeHost::UpdateTopControlsState(TopControlsState constraints,
animate));
}
-scoped_ptr<base::Value> LayerTreeHost::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- state->Set("proxy", proxy_->AsValue().release());
- return state.PassAs<base::Value>();
+void LayerTreeHost::AsValueInto(base::debug::TracedValue* state) const {
+ state->BeginDictionary("proxy");
+ proxy_->AsValueInto(state);
+ state->EndDictionary();
}
void LayerTreeHost::AnimateLayers(base::TimeTicks monotonic_time) {
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index d7a618a..2fa5b58 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -257,7 +257,7 @@ class CC_EXPORT LayerTreeHost {
}
// Obtains a thorough dump of the LayerTreeHost as a value.
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* value) const;
bool in_paint_layer_contents() const { return in_paint_layer_contents_; }
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index fdf8e5c..e155be6 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -9,6 +9,7 @@
#include "base/basictypes.h"
#include "base/containers/hash_tables.h"
+#include "base/debug/trace_event_argument.h"
#include "base/json/json_writer.h"
#include "base/metrics/histogram.h"
#include "base/stl_util.h"
@@ -528,8 +529,8 @@ void LayerTreeHostImpl::TrackDamageForAllSurfaces(
}
}
-scoped_ptr<base::Value> LayerTreeHostImpl::FrameData::AsValue() const {
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+void LayerTreeHostImpl::FrameData::AsValueInto(
+ base::debug::TracedValue* value) const {
value->SetBoolean("contains_incomplete_tile", contains_incomplete_tile);
value->SetBoolean("has_no_damage", has_no_damage);
@@ -539,12 +540,14 @@ scoped_ptr<base::Value> LayerTreeHostImpl::FrameData::AsValue() const {
TRACE_EVENT_CATEGORY_GROUP_ENABLED(
TRACE_DISABLED_BY_DEFAULT("cc.debug.quads"), &quads_enabled);
if (quads_enabled) {
- scoped_ptr<base::ListValue> render_pass_list(new base::ListValue());
- for (size_t i = 0; i < render_passes.size(); ++i)
- render_pass_list->Append(render_passes[i]->AsValue().release());
- value->Set("render_passes", render_pass_list.release());
+ value->BeginArray("render_passes");
+ for (size_t i = 0; i < render_passes.size(); ++i) {
+ value->BeginDictionary();
+ render_passes[i]->AsValueInto(value);
+ value->EndDictionary();
+ }
+ value->EndArray();
}
- return value.PassAs<base::Value>();
}
void LayerTreeHostImpl::FrameData::AppendRenderPass(
@@ -1543,7 +1546,7 @@ void LayerTreeHostImpl::DrawLayers(FrameData* frame,
TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers"),
"cc::LayerTreeHostImpl",
id_,
- TracedValue::FromValue(AsValueWithFrame(frame).release()));
+ AsValueWithFrame(frame));
}
const DrawMode draw_mode = GetDrawMode();
@@ -3169,29 +3172,66 @@ base::TimeTicks LayerTreeHostImpl::CurrentFrameTimeTicks() {
return gfx::FrameTime::Now();
}
-scoped_ptr<base::Value> LayerTreeHostImpl::AsValueWithFrame(
- FrameData* frame) const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- if (this->pending_tree_)
- state->Set("activation_state", ActivationStateAsValue().release());
- state->Set("device_viewport_size",
- MathUtil::AsValue(device_viewport_size_).release());
- if (tile_manager_)
- state->Set("tiles", tile_manager_->AllTilesAsValue().release());
- state->Set("active_tree", active_tree_->AsValue().release());
- if (pending_tree_)
- state->Set("pending_tree", pending_tree_->AsValue().release());
- if (frame)
- state->Set("frame", frame->AsValue().release());
- return state.PassAs<base::Value>();
-}
-
-scoped_ptr<base::Value> LayerTreeHostImpl::ActivationStateAsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- state->Set("lthi", TracedValue::CreateIDRef(this).release());
- if (tile_manager_)
- state->Set("tile_manager", tile_manager_->BasicStateAsValue().release());
- return state.PassAs<base::Value>();
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+LayerTreeHostImpl::AsValue() const {
+ return AsValueWithFrame(NULL);
+}
+
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+LayerTreeHostImpl::AsValueWithFrame(FrameData* frame) const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
+ AsValueWithFrameInto(frame, state.get());
+ return state;
+}
+
+void LayerTreeHostImpl::AsValueWithFrameInto(
+ FrameData* frame,
+ base::debug::TracedValue* state) const {
+ if (this->pending_tree_) {
+ state->BeginDictionary("activation_state");
+ ActivationStateAsValueInto(state);
+ state->EndDictionary();
+ }
+ state->BeginDictionary("device_viewport_size");
+ MathUtil::AddToTracedValue(device_viewport_size_, state);
+ state->EndDictionary();
+ if (tile_manager_) {
+ state->BeginArray("tiles");
+ tile_manager_->AllTilesAsValueInto(state);
+ state->EndArray();
+ }
+ state->BeginDictionary("active_tree");
+ active_tree_->AsValueInto(state);
+ state->EndDictionary();
+ if (pending_tree_) {
+ state->BeginDictionary("pending_tree");
+ pending_tree_->AsValueInto(state);
+ state->EndDictionary();
+ }
+ if (frame) {
+ state->BeginDictionary("frame");
+ frame->AsValueInto(state);
+ state->EndDictionary();
+ }
+}
+
+scoped_refptr<base::debug::ConvertableToTraceFormat>
+LayerTreeHostImpl::ActivationStateAsValue() const {
+ scoped_refptr<base::debug::TracedValue> state =
+ new base::debug::TracedValue();
+ ActivationStateAsValueInto(state.get());
+ return state;
+}
+
+void LayerTreeHostImpl::ActivationStateAsValueInto(
+ base::debug::TracedValue* state) const {
+ TracedValue::SetIDRef(this, state, "lthi");
+ if (tile_manager_) {
+ state->BeginDictionary("tile_manager");
+ tile_manager_->BasicStateAsValueInto(state);
+ state->EndDictionary();
+ }
}
void LayerTreeHostImpl::SetDebugState(
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 7b3c3fd..821028f 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -165,7 +165,7 @@ class CC_EXPORT LayerTreeHostImpl
struct CC_EXPORT FrameData : public RenderPassSink {
FrameData();
virtual ~FrameData();
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* value) const;
std::vector<gfx::Rect> occluding_screen_space_rects;
std::vector<gfx::Rect> non_occluding_screen_space_rects;
@@ -434,9 +434,17 @@ class CC_EXPORT LayerTreeHostImpl
return begin_impl_frame_interval_;
}
- scoped_ptr<base::Value> AsValue() const { return AsValueWithFrame(NULL); }
- scoped_ptr<base::Value> AsValueWithFrame(FrameData* frame) const;
- scoped_ptr<base::Value> ActivationStateAsValue() const;
+ void AsValueInto(base::debug::TracedValue* value) const {
+ return AsValueWithFrameInto(NULL, value);
+ }
+ void AsValueWithFrameInto(FrameData* frame,
+ base::debug::TracedValue* value) const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> AsValue() const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> AsValueWithFrame(
+ FrameData* frame) const;
+ scoped_refptr<base::debug::ConvertableToTraceFormat> ActivationStateAsValue()
+ const;
+ void ActivationStateAsValueInto(base::debug::TracedValue* value) const;
bool page_scale_animation_active() const { return !!page_scale_animation_; }
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 4b21b14..c054b78 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -8,6 +8,7 @@
#include <set>
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "cc/animation/keyframed_animation_curve.h"
#include "cc/animation/scrollbar_animation_controller.h"
#include "cc/animation/scrollbar_animation_controller_linear_fade.h"
@@ -820,26 +821,23 @@ AnimationRegistrar* LayerTreeImpl::animationRegistrar() const {
return layer_tree_host_impl_->animation_registrar();
}
-scoped_ptr<base::Value> LayerTreeImpl::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- TracedValue::MakeDictIntoImplicitSnapshot(
- state.get(), "cc::LayerTreeImpl", this);
+void LayerTreeImpl::AsValueInto(base::debug::TracedValue* state) const {
+ TracedValue::MakeDictIntoImplicitSnapshot(state, "cc::LayerTreeImpl", this);
- state->Set("root_layer", root_layer_->AsValue().release());
+ state->BeginDictionary("root_layer");
+ root_layer_->AsValueInto(state);
+ state->EndDictionary();
- scoped_ptr<base::ListValue> render_surface_layer_list(new base::ListValue());
+ state->BeginArray("render_surface_layer_list");
typedef LayerIterator<LayerImpl> LayerIteratorType;
LayerIteratorType end = LayerIteratorType::End(&render_surface_layer_list_);
for (LayerIteratorType it = LayerIteratorType::Begin(
&render_surface_layer_list_); it != end; ++it) {
if (!it.represents_itself())
continue;
- render_surface_layer_list->Append(TracedValue::CreateIDRef(*it).release());
+ TracedValue::AppendIDRef(*it, state);
}
-
- state->Set("render_surface_layer_list",
- render_surface_layer_list.release());
- return state.PassAs<base::Value>();
+ state->EndArray();
}
void LayerTreeImpl::SetRootLayerScrollOffsetDelegate(
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
index e602872..fa6d63a 100644
--- a/cc/trees/layer_tree_impl.h
+++ b/cc/trees/layer_tree_impl.h
@@ -28,6 +28,12 @@ struct hash<cc::LayerImpl*> {
} // namespace BASE_HASH_NAMESPACE
#endif // COMPILER
+namespace base {
+namespace debug {
+class TracedValue;
+}
+}
+
namespace cc {
class ContextProvider;
@@ -106,7 +112,7 @@ class CC_EXPORT LayerTreeImpl {
const LayerTreeDebugState& debug_state() const;
float device_scale_factor() const;
DebugRectHistory* debug_rect_history() const;
- scoped_ptr<base::Value> AsValue() const;
+ void AsValueInto(base::debug::TracedValue* dict) const;
// Other public methods
// ---------------------------------------------------------------------------
diff --git a/cc/trees/proxy.cc b/cc/trees/proxy.cc
index 9258355..3136c65 100644
--- a/cc/trees/proxy.cc
+++ b/cc/trees/proxy.cc
@@ -83,8 +83,4 @@ Proxy::~Proxy() {
DCHECK(IsMainThread());
}
-scoped_ptr<base::Value> Proxy::SchedulerAsValueForTesting() {
- return make_scoped_ptr(base::Value::CreateNullValue());
-}
-
} // namespace cc
diff --git a/cc/trees/proxy.h b/cc/trees/proxy.h
index 7854edc..6100562 100644
--- a/cc/trees/proxy.h
+++ b/cc/trees/proxy.h
@@ -16,7 +16,12 @@
#include "base/values.h"
#include "cc/base/cc_export.h"
-namespace base { class SingleThreadTaskRunner; }
+namespace base {
+namespace debug {
+class TracedValue;
+}
+class SingleThreadTaskRunner;
+}
namespace gfx {
class Rect;
@@ -91,13 +96,12 @@ class CC_EXPORT Proxy {
virtual bool SupportsImplScrolling() const = 0;
- virtual scoped_ptr<base::Value> AsValue() const = 0;
+ virtual void AsValueInto(base::debug::TracedValue* value) const = 0;
virtual void SetDebugState(const LayerTreeDebugState& debug_state) = 0;
// Testing hooks
virtual bool CommitPendingForTesting() = 0;
- virtual scoped_ptr<base::Value> SchedulerAsValueForTesting();
protected:
Proxy(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 45dbe89..2f67740 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -369,18 +369,15 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) {
}
}
-scoped_ptr<base::Value> SingleThreadProxy::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
- {
- // The following line casts away const modifiers because it is just
- // setting debug state. We still want the AsValue() function and its
- // call chain to be const throughout.
- DebugScopedSetImplThread impl(const_cast<SingleThreadProxy*>(this));
-
- state->Set("layer_tree_host_impl",
- layer_tree_host_impl_->AsValue().release());
- }
- return state.PassAs<base::Value>();
+void SingleThreadProxy::AsValueInto(base::debug::TracedValue* state) const {
+ // The following line casts away const modifiers because it is just
+ // setting debug state. We still want the AsValue() function and its
+ // call chain to be const throughout.
+ DebugScopedSetImplThread impl(const_cast<SingleThreadProxy*>(this));
+
+ state->BeginDictionary("layer_tree_host_impl");
+ layer_tree_host_impl_->AsValueInto(state);
+ state->EndDictionary();
}
void SingleThreadProxy::ForceSerializeOnSwapBuffers() {
diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h
index cd593ac..2b70d70 100644
--- a/cc/trees/single_thread_proxy.h
+++ b/cc/trees/single_thread_proxy.h
@@ -49,7 +49,7 @@ class CC_EXPORT SingleThreadProxy : public Proxy,
virtual size_t MaxPartialTextureUpdates() const OVERRIDE;
virtual void ForceSerializeOnSwapBuffers() OVERRIDE;
virtual bool SupportsImplScrolling() const OVERRIDE;
- virtual scoped_ptr<base::Value> AsValue() const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* state) const OVERRIDE;
virtual bool CommitPendingForTesting() OVERRIDE;
// LayerTreeHostImplClient implementation
diff --git a/cc/trees/thread_proxy.cc b/cc/trees/thread_proxy.cc
index 03e7afc..b18b93a 100644
--- a/cc/trees/thread_proxy.cc
+++ b/cc/trees/thread_proxy.cc
@@ -10,6 +10,7 @@
#include "base/auto_reset.h"
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_argument.h"
#include "base/debug/trace_event_synthetic_delay.h"
#include "cc/base/swap_promise.h"
#include "cc/debug/benchmark_instrumentation.h"
@@ -1295,28 +1296,27 @@ ThreadProxy::BeginMainFrameAndCommitState::BeginMainFrameAndCommitState()
ThreadProxy::BeginMainFrameAndCommitState::~BeginMainFrameAndCommitState() {}
-scoped_ptr<base::Value> ThreadProxy::AsValue() const {
- scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue());
-
+void ThreadProxy::AsValueInto(base::debug::TracedValue* state) const {
CompletionEvent completion;
{
DebugScopedSetMainThreadBlocked main_thread_blocked(
const_cast<ThreadProxy*>(this));
+ scoped_refptr<base::debug::TracedValue> state_refptr(state);
Proxy::ImplThreadTaskRunner()->PostTask(
FROM_HERE,
base::Bind(&ThreadProxy::AsValueOnImplThread,
impl_thread_weak_ptr_,
&completion,
- state.get()));
+ state_refptr));
completion.Wait();
}
- return state.PassAs<base::Value>();
}
void ThreadProxy::AsValueOnImplThread(CompletionEvent* completion,
- base::DictionaryValue* state) const {
- state->Set("layer_tree_host_impl",
- impl().layer_tree_host_impl->AsValue().release());
+ base::debug::TracedValue* state) const {
+ state->BeginDictionary("layer_tree_host_impl");
+ impl().layer_tree_host_impl->AsValueInto(state);
+ state->EndDictionary();
completion->Signal();
}
@@ -1345,30 +1345,6 @@ void ThreadProxy::CommitPendingOnImplThreadForTesting(
request->completion.Signal();
}
-scoped_ptr<base::Value> ThreadProxy::SchedulerAsValueForTesting() {
- if (IsImplThread())
- return impl().scheduler->AsValue().Pass();
-
- SchedulerStateRequest scheduler_state_request;
- {
- DebugScopedSetMainThreadBlocked main_thread_blocked(this);
- Proxy::ImplThreadTaskRunner()->PostTask(
- FROM_HERE,
- base::Bind(&ThreadProxy::SchedulerAsValueOnImplThreadForTesting,
- impl_thread_weak_ptr_,
- &scheduler_state_request));
- scheduler_state_request.completion.Wait();
- }
- return scheduler_state_request.state.Pass();
-}
-
-void ThreadProxy::SchedulerAsValueOnImplThreadForTesting(
- SchedulerStateRequest* request) {
- DCHECK(IsImplThread());
- request->state = impl().scheduler->AsValue();
- request->completion.Signal();
-}
-
void ThreadProxy::RenewTreePriority() {
DCHECK(IsImplThread());
bool smoothness_takes_priority =
diff --git a/cc/trees/thread_proxy.h b/cc/trees/thread_proxy.h
index a28068e..1bea3bf 100644
--- a/cc/trees/thread_proxy.h
+++ b/cc/trees/thread_proxy.h
@@ -173,9 +173,8 @@ class CC_EXPORT ThreadProxy : public Proxy,
virtual void ForceSerializeOnSwapBuffers() OVERRIDE;
virtual bool SupportsImplScrolling() const OVERRIDE;
virtual void SetDebugState(const LayerTreeDebugState& debug_state) OVERRIDE;
- virtual scoped_ptr<base::Value> AsValue() const OVERRIDE;
+ virtual void AsValueInto(base::debug::TracedValue* value) const OVERRIDE;
virtual bool CommitPendingForTesting() OVERRIDE;
- virtual scoped_ptr<base::Value> SchedulerAsValueForTesting() OVERRIDE;
// LayerTreeHostImplClient implementation
virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE;
@@ -277,9 +276,8 @@ class CC_EXPORT ThreadProxy : public Proxy,
void ForceSerializeOnSwapBuffersOnImplThread(CompletionEvent* completion);
void CheckOutputSurfaceStatusOnImplThread();
void CommitPendingOnImplThreadForTesting(CommitPendingRequest* request);
- void SchedulerAsValueOnImplThreadForTesting(SchedulerStateRequest* request);
void AsValueOnImplThread(CompletionEvent* completion,
- base::DictionaryValue* state) const;
+ base::debug::TracedValue* state) const;
void SetSwapUsedIncompleteTileOnImplThread(bool used_incomplete_tile);
void MainThreadHasStoppedFlingingOnImplThread();
void SetInputThrottledUntilCommitOnImplThread(bool is_throttled);