void InspectorLayerTreeAgent::snapshotCommandLog(ErrorString* errorString, const String& snapshotId, RefPtr<TypeBuilder::Array<JSONObject> >& commandLog) { const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) return; commandLog = TypeBuilder::Array<JSONObject>::runtimeCast(snapshot->snapshotCommandLog()); }
void InspectorLayerTreeAgent::replaySnapshot(ErrorString* errorString, const String& snapshotId, const int* fromStep, const int* toStep, String* dataURL) { const GraphicsContextSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) return; OwnPtr<ImageBuffer> imageBuffer = snapshot->replay(fromStep ? *fromStep : 0, toStep ? *toStep : 0); *dataURL = imageBuffer->toDataURL("image/png"); }
void InspectorLayerTreeAgent::profileSnapshot(ErrorString* errorString, const String& snapshotId, const int* minRepeatCount, const double* minDuration, RefPtr<TypeBuilder::Array<TypeBuilder::Array<double> > >& outTimings) { const GraphicsContextSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) return; OwnPtr<GraphicsContextSnapshot::Timings> timings = snapshot->profile(minRepeatCount ? *minRepeatCount : 1, minDuration ? *minDuration : 0); outTimings = TypeBuilder::Array<TypeBuilder::Array<double> >::create(); for (size_t i = 0; i < timings->size(); ++i) { const Vector<double>& row = (*timings)[i]; RefPtr<TypeBuilder::Array<double> > outRow = TypeBuilder::Array<double>::create(); for (size_t j = 0; j < row.size(); ++j) outRow->addItem(row[j]); outTimings->addItem(outRow.release()); } }
void InspectorLayerTreeAgent::replaySnapshot(ErrorString* errorString, const String& snapshotId, const int* fromStep, const int* toStep, const double* scale, String* dataURL) { const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) return; OwnPtr<Vector<char> > base64Data = snapshot->replay(fromStep ? *fromStep : 0, toStep ? *toStep : 0, scale ? *scale : 1.0); if (!base64Data) { *errorString = "Image encoding failed"; return; } StringBuilder url; url.appendLiteral("data:image/png;base64,"); url.reserveCapacity(url.length() + base64Data->size()); url.append(base64Data->begin(), base64Data->size()); *dataURL = url.toString(); }
void InspectorLayerTreeAgent::profileSnapshot(ErrorString* errorString, const String& snapshotId, const int* minRepeatCount, const double* minDuration, const RefPtr<JSONObject>* clipRect, RefPtr<TypeBuilder::Array<TypeBuilder::Array<double> > >& outTimings) { const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId); if (!snapshot) return; FloatRect rect; if (clipRect && !parseRect(**clipRect, &rect)) { *errorString = "Invalid argument, missing required field"; return; } OwnPtr<PictureSnapshot::Timings> timings = snapshot->profile(minRepeatCount ? *minRepeatCount : 1, minDuration ? *minDuration : 0, clipRect ? &rect : 0); outTimings = TypeBuilder::Array<TypeBuilder::Array<double> >::create(); for (size_t i = 0; i < timings->size(); ++i) { const Vector<double>& row = (*timings)[i]; RefPtr<TypeBuilder::Array<double> > outRow = TypeBuilder::Array<double>::create(); for (size_t j = 0; j < row.size(); ++j) outRow->addItem(row[j]); outTimings->addItem(outRow.release()); } }