Index: cc/output/begin_frame_args.cc |
diff --git a/cc/output/begin_frame_args.cc b/cc/output/begin_frame_args.cc |
index 92901afb1f3d897b37ca374297a8e5bc25463cbc..f74c061fda0500c6a1ae6d911b0bf5d63f12599a 100644 |
--- a/cc/output/begin_frame_args.cc |
+++ b/cc/output/begin_frame_args.cc |
@@ -2,6 +2,9 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <string> |
+ |
+#include "base/json/json_writer.h" |
#include "cc/output/begin_frame_args.h" |
#include "ui/gfx/frame_time.h" |
@@ -27,6 +30,58 @@ 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); |
+ 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>(); |
+} |
+ |
+namespace { |
+ |
+// TODO(mithro): This class should be part of base/debug/trace code. |
+class TracedValue : public base::debug::ConvertableToTraceFormat { |
+ public: |
+ static scoped_refptr<base::debug::ConvertableToTraceFormat> FromValue( |
+ scoped_ptr<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); |
+}; |
+ |
+scoped_refptr<base::debug::ConvertableToTraceFormat> TracedValue::FromValue( |
+ scoped_ptr<base::Value> value) { |
+ return scoped_refptr<base::debug::ConvertableToTraceFormat>( |
+ new TracedValue(value.release())); |
+} |
+ |
+TracedValue::~TracedValue() { |
+} |
+ |
+void TracedValue::AppendAsTraceFormat(std::string* out) const { |
+ std::string tmp; |
+ base::JSONWriter::Write(value_.get(), &tmp); |
+ *out += tmp; |
+} |
+ |
+TracedValue::TracedValue(base::Value* value) : value_(value) { |
+} |
+} // namespace |
+ |
+scoped_refptr<base::debug::ConvertableToTraceFormat> BeginFrameArgs::AsTrace() |
+ const { |
+ return TracedValue::FromValue(AsValue()); |
+} |
+ |
BeginFrameArgs BeginFrameArgs::CreateForSynchronousCompositor() { |
// For WebView/SynchronousCompositor, we always want to draw immediately, |
// so we set the deadline to 0 and guess that the interval is 16 milliseconds. |