• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "cc/debug/traced_picture.h"
6 
7 #include "base/json/json_writer.h"
8 #include "base/strings/stringprintf.h"
9 #include "base/values.h"
10 #include "cc/debug/traced_value.h"
11 
12 namespace cc {
13 
TracedPicture(scoped_refptr<Picture> picture)14 TracedPicture::TracedPicture(scoped_refptr<Picture> picture)
15   : picture_(picture),
16     is_alias_(false) {
17 }
18 
~TracedPicture()19 TracedPicture::~TracedPicture() {
20 }
21 
22 scoped_refptr<base::debug::ConvertableToTraceFormat>
AsTraceablePicture(Picture * picture)23     TracedPicture::AsTraceablePicture(Picture* picture) {
24   return scoped_refptr<base::debug::ConvertableToTraceFormat>(
25       new TracedPicture(picture));
26 }
27 
28 scoped_refptr<base::debug::ConvertableToTraceFormat>
AsTraceablePictureAlias(Picture * original)29     TracedPicture::AsTraceablePictureAlias(Picture* original) {
30   scoped_refptr<TracedPicture> ptr = new TracedPicture(original);
31   ptr->is_alias_ = true;
32   return scoped_refptr<base::debug::ConvertableToTraceFormat>(ptr);
33 }
34 
AppendAsTraceFormat(std::string * out) const35 void TracedPicture::AppendAsTraceFormat(std::string* out) const {
36   if (is_alias_)
37     AppendPictureAlias(out);
38   else
39     AppendPicture(out);
40 }
41 
AppendPictureAlias(std::string * out) const42 void TracedPicture::AppendPictureAlias(std::string* out) const {
43   scoped_ptr<base::DictionaryValue> alias(new base::DictionaryValue());
44   alias->SetString("id_ref", base::StringPrintf("%p", picture_.get()));
45 
46   scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
47   res->Set("alias", alias.release());
48 
49   std::string tmp;
50   base::JSONWriter::Write(res.get(), &tmp);
51   out->append(tmp);
52 }
53 
AppendPicture(std::string * out) const54 void TracedPicture::AppendPicture(std::string* out) const {
55   scoped_ptr<base::Value> value = picture_->AsValue();
56   std::string tmp;
57   base::JSONWriter::Write(value.get(), &tmp);
58   out->append(tmp);
59 }
60 
61 }  // namespace cc
62