#include "cc/trees/frame_data.h"
#include <string>
#include <unordered_map>
#include "base/trace_event/traced_value.h"
#include "base/trace_event/typed_macros.h"
#include "cc/base/histograms.h"
#include "third_party/perfetto/include/perfetto/tracing/track.h"
#include "third_party/perfetto/protos/perfetto/trace/track_event/chrome_latency_info.pbzero.h"
namespace cc {
FrameData::FrameData() = default;
FrameData::~FrameData() = default;
void FrameData::AsValueInto(base::trace_event::TracedValue* value) const {
value->SetBoolean("has_no_damage", has_no_damage);
const char* client_name = GetClientNameForMetrics();
bool is_renderer =
client_name && UNSAFE_TODO(strcmp(client_name, "Renderer")) == 0;
bool quads_enabled;
TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("viz.quads"),
&quads_enabled);
if (is_renderer && quads_enabled) {
std::unordered_map<viz::ResourceId, size_t> resource_id_to_index_map;
value->BeginArray("render_passes");
for (const auto& render_pass : render_passes) {
value->BeginDictionary();
render_pass->AsValueInto(value, resource_id_to_index_map);
value->EndDictionary();
}
value->EndArray();
}
}
std::string FrameData::ToString() const {
base::trace_event::TracedValueJSON value;
AsValueInto(&value);
return value.ToFormattedJSON();
}
void FrameData::set_trees_in_viz_timestamps(
const viz::TreesInVizTiming& timing_details) {
trees_in_viz_timing_details = timing_details;
}
}