| Index: cc/playback/display_item_list.cc
|
| diff --git a/cc/playback/display_item_list.cc b/cc/playback/display_item_list.cc
|
| index 779fc81dded3996fc1042c0387435244971bd3f3..3229b83019b23da651c8684611613256efdd7f6f 100644
|
| --- a/cc/playback/display_item_list.cc
|
| +++ b/cc/playback/display_item_list.cc
|
| @@ -14,8 +14,6 @@
|
| #include "base/trace_event/trace_event_argument.h"
|
| #include "cc/base/math_util.h"
|
| #include "cc/debug/picture_debug_util.h"
|
| -#include "cc/debug/traced_display_item_list.h"
|
| -#include "cc/debug/traced_value.h"
|
| #include "cc/playback/clip_display_item.h"
|
| #include "cc/playback/clip_path_display_item.h"
|
| #include "cc/playback/compositing_display_item.h"
|
| @@ -38,13 +36,6 @@ namespace {
|
| // operations.
|
| const int kOpCountThatIsOkToAnalyze = 10;
|
|
|
| -bool DisplayItemsTracingEnabled() {
|
| - bool tracing_enabled;
|
| - TRACE_EVENT_CATEGORY_GROUP_ENABLED(
|
| - TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"), &tracing_enabled);
|
| - return tracing_enabled;
|
| -}
|
| -
|
| bool GetCanvasClipBounds(SkCanvas* canvas, gfx::Rect* clip_bounds) {
|
| SkRect canvas_clip_bounds;
|
| if (!canvas->getLocalClipBounds(&canvas_clip_bounds))
|
| @@ -194,50 +185,193 @@ bool DisplayItemList::ShouldBeAnalyzedForSolidColor() const {
|
| return ApproximateOpCount() <= kOpCountThatIsOkToAnalyze;
|
| }
|
|
|
| -std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
|
| -DisplayItemList::AsValue(bool include_items) const {
|
| - std::unique_ptr<base::trace_event::TracedValue> state(
|
| - new base::trace_event::TracedValue());
|
| +void DisplayItemList::EmitTraceSnapshot() const {
|
| + bool include_items;
|
| + TRACE_EVENT_CATEGORY_GROUP_ENABLED(
|
| + TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"), &include_items);
|
| + TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
|
| + TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") ","
|
| + TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") ","
|
| + TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"),
|
| + "cc::DisplayItemList", this, CreateTracedValue(include_items));
|
| +}
|
|
|
| +std::unique_ptr<base::trace_event::TracedValue>
|
| +DisplayItemList::CreateTracedValue(bool include_items) const {
|
| + auto state = base::MakeUnique<base::trace_event::TracedValue>();
|
| state->BeginDictionary("params");
|
| +
|
| if (include_items) {
|
| state->BeginArray("items");
|
| - size_t item_index = 0;
|
| - for (const DisplayItem& item : inputs_.items) {
|
| - item.AsValueInto(item_index < inputs_.visual_rects.size()
|
| - ? inputs_.visual_rects[item_index]
|
| - : gfx::Rect(),
|
| - state.get());
|
| - item_index++;
|
| +
|
| + auto visual_rects_it = inputs_.visual_rects.begin();
|
| + for (const DisplayItem& base_item : inputs_.items) {
|
| + gfx::Rect visual_rect;
|
| + if (visual_rects_it != inputs_.visual_rects.end()) {
|
| + visual_rect = *visual_rects_it;
|
| + ++visual_rects_it;
|
| + }
|
| +
|
| + switch (base_item.type()) {
|
| + case DisplayItem::CLIP: {
|
| + const auto& item = static_cast<const ClipDisplayItem&>(base_item);
|
| + std::string output =
|
| + base::StringPrintf("ClipDisplayItem rect: [%s] visualRect: [%s]",
|
| + item.clip_rect().ToString().c_str(),
|
| + visual_rect.ToString().c_str());
|
| + for (const SkRRect& rounded_rect : item.rounded_clip_rects()) {
|
| + base::StringAppendF(
|
| + &output, " rounded_rect: [rect: [%s]",
|
| + gfx::SkRectToRectF(rounded_rect.rect()).ToString().c_str());
|
| + base::StringAppendF(&output, " radii: [");
|
| + SkVector upper_left_radius =
|
| + rounded_rect.radii(SkRRect::kUpperLeft_Corner);
|
| + base::StringAppendF(&output, "[%f,%f],", upper_left_radius.x(),
|
| + upper_left_radius.y());
|
| + SkVector upper_right_radius =
|
| + rounded_rect.radii(SkRRect::kUpperRight_Corner);
|
| + base::StringAppendF(&output, " [%f,%f],", upper_right_radius.x(),
|
| + upper_right_radius.y());
|
| + SkVector lower_right_radius =
|
| + rounded_rect.radii(SkRRect::kLowerRight_Corner);
|
| + base::StringAppendF(&output, " [%f,%f],", lower_right_radius.x(),
|
| + lower_right_radius.y());
|
| + SkVector lower_left_radius =
|
| + rounded_rect.radii(SkRRect::kLowerLeft_Corner);
|
| + base::StringAppendF(&output, " [%f,%f]]", lower_left_radius.x(),
|
| + lower_left_radius.y());
|
| + }
|
| + state->AppendString(output);
|
| + break;
|
| + }
|
| + case DisplayItem::END_CLIP:
|
| + state->AppendString(
|
| + base::StringPrintf("EndClipDisplayItem visualRect: [%s]",
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + case DisplayItem::CLIP_PATH: {
|
| + const auto& item = static_cast<const ClipPathDisplayItem&>(base_item);
|
| + state->AppendString(base::StringPrintf(
|
| + "ClipPathDisplayItem length: %d visualRect: [%s]",
|
| + item.clip_path().countPoints(), visual_rect.ToString().c_str()));
|
| + break;
|
| + }
|
| + case DisplayItem::END_CLIP_PATH:
|
| + state->AppendString(
|
| + base::StringPrintf("EndClipPathDisplayItem visualRect: [%s]",
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + case DisplayItem::COMPOSITING: {
|
| + const auto& item =
|
| + static_cast<const CompositingDisplayItem&>(base_item);
|
| + std::string output = base::StringPrintf(
|
| + "CompositingDisplayItem alpha: %d, xfermode: %d, visualRect: "
|
| + "[%s]",
|
| + item.alpha(), static_cast<int>(item.xfermode()),
|
| + visual_rect.ToString().c_str());
|
| + if (item.has_bounds()) {
|
| + base::StringAppendF(
|
| + &output, ", bounds: [%s]",
|
| + gfx::SkRectToRectF(item.bounds()).ToString().c_str());
|
| + }
|
| + state->AppendString(output);
|
| + break;
|
| + }
|
| + case DisplayItem::END_COMPOSITING:
|
| + state->AppendString(
|
| + base::StringPrintf("EndCompositingDisplayItem visualRect: [%s]",
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + case DisplayItem::DRAWING: {
|
| + const auto& item = static_cast<const DrawingDisplayItem&>(base_item);
|
| + state->BeginDictionary();
|
| + state->SetString("name", "DrawingDisplayItem");
|
| +
|
| + state->BeginArray("visualRect");
|
| + state->AppendInteger(visual_rect.x());
|
| + state->AppendInteger(visual_rect.y());
|
| + state->AppendInteger(visual_rect.width());
|
| + state->AppendInteger(visual_rect.height());
|
| + state->EndArray();
|
| +
|
| + state->BeginArray("cullRect");
|
| + state->AppendInteger(item.picture().cullRect().x());
|
| + state->AppendInteger(item.picture().cullRect().y());
|
| + state->AppendInteger(item.picture().cullRect().width());
|
| + state->AppendInteger(item.picture().cullRect().height());
|
| + state->EndArray();
|
| +
|
| + std::string b64_picture;
|
| + PictureDebugUtil::SerializeAsBase64(ToSkPicture(&item.picture()),
|
| + &b64_picture);
|
| + state->SetString("skp64", b64_picture);
|
| + state->EndDictionary();
|
| + break;
|
| + }
|
| + case DisplayItem::FILTER: {
|
| + const auto& item = static_cast<const FilterDisplayItem&>(base_item);
|
| + state->AppendString(base::StringPrintf(
|
| + "FilterDisplayItem bounds: [%s] visualRect: [%s]",
|
| + item.bounds().ToString().c_str(),
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + }
|
| + case DisplayItem::END_FILTER:
|
| + state->AppendString(
|
| + base::StringPrintf("EndFilterDisplayItem visualRect: [%s]",
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + case DisplayItem::FLOAT_CLIP: {
|
| + const auto& item =
|
| + static_cast<const FloatClipDisplayItem&>(base_item);
|
| + state->AppendString(base::StringPrintf(
|
| + "FloatClipDisplayItem rect: [%s] visualRect: [%s]",
|
| + item.clip_rect().ToString().c_str(),
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + }
|
| + case DisplayItem::END_FLOAT_CLIP:
|
| + state->AppendString(
|
| + base::StringPrintf("EndFloatClipDisplayItem visualRect: [%s]",
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + case DisplayItem::TRANSFORM: {
|
| + const auto& item =
|
| + static_cast<const TransformDisplayItem&>(base_item);
|
| + state->AppendString(base::StringPrintf(
|
| + "TransformDisplayItem transform: [%s] visualRect: [%s]",
|
| + item.transform().ToString().c_str(),
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + }
|
| + case DisplayItem::END_TRANSFORM:
|
| + state->AppendString(
|
| + base::StringPrintf("EndTransformDisplayItem visualRect: [%s]",
|
| + visual_rect.ToString().c_str()));
|
| + break;
|
| + }
|
| }
|
| state->EndArray(); // "items".
|
| }
|
| +
|
| MathUtil::AddToTracedValue("layer_rect", rtree_.GetBounds(), state.get());
|
| state->EndDictionary(); // "params".
|
|
|
| - SkPictureRecorder recorder;
|
| - gfx::Rect bounds = rtree_.GetBounds();
|
| - SkCanvas* canvas = recorder.beginRecording(bounds.width(), bounds.height());
|
| - canvas->translate(-bounds.x(), -bounds.y());
|
| - canvas->clipRect(gfx::RectToSkRect(bounds));
|
| - Raster(canvas, nullptr, gfx::Rect(), 1.f);
|
| - sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
| -
|
| - std::string b64_picture;
|
| - PictureDebugUtil::SerializeAsBase64(picture.get(), &b64_picture);
|
| - state->SetString("skp64", b64_picture);
|
| -
|
| - return std::move(state);
|
| -}
|
| + {
|
| + SkPictureRecorder recorder;
|
| + gfx::Rect bounds = rtree_.GetBounds();
|
| + SkCanvas* canvas = recorder.beginRecording(bounds.width(), bounds.height());
|
| + canvas->translate(-bounds.x(), -bounds.y());
|
| + canvas->clipRect(gfx::RectToSkRect(bounds));
|
| + Raster(canvas, nullptr, gfx::Rect(), 1.f);
|
| + sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
| +
|
| + std::string b64_picture;
|
| + PictureDebugUtil::SerializeAsBase64(picture.get(), &b64_picture);
|
| + state->SetString("skp64", b64_picture);
|
| + }
|
|
|
| -void DisplayItemList::EmitTraceSnapshot() const {
|
| - TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
|
| - TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") ","
|
| - TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") ","
|
| - TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"),
|
| - "cc::DisplayItemList", this,
|
| - TracedDisplayItemList::AsTraceableDisplayItemList(this,
|
| - DisplayItemsTracingEnabled()));
|
| + return state;
|
| }
|
|
|
| void DisplayItemList::GenerateDiscardableImagesMetadata() {
|
|
|