Hi, Also found out that through paint_op_helper's tostring method <https://source.chromium.org/chromium/chromium/src/+/main:cc/test/paint_op_helper.cc;l=5;drc=6d5b8a58bbad4174871fb25c4f0fab5fb44771e1;bpv=1;bpt=1?q=paint_op_helper&sq=&ss=chromium%2Fchromium%2Fsrc> , all the PaintOps related information can be printed. It includes all the information- coordinates, paint info etc. Wondering, can these be converted directly into SKIA commands to render the page? Please help me finalize the correct approach.
On Sun, May 5, 2024 at 3:49 AM Ken Russell <[email protected]> wrote: > I'm not sure exactly how SkPicture recording works - please join > https://groups.google.com/a/chromium.org/g/graphics-dev and email > [email protected] . > > -Ken > > > > On Sat, May 4, 2024 at 6:21 AM Steven Whelan <[email protected]> > wrote: > >> Hi I am able to write the serialized SKData (captured from Serialize >> method of paint_op_buffer_serializer >> <https://source.chromium.org/chromium/chromium/src/+/main:cc/paint/paint_op_buffer_serializer.cc;l=5;bpv=1;bpt=1?q=paint_op_buffer_serializer&ss=chromium%2Fchromium%2Fsrc> >> as >> shown in the first mail) to a file and was also able to use this file for >> playback on canvas. >> However, it only played back the text. How do I ensure that images also >> get captured in my SKPicture recording? Do I have to have multiple >> SKPictureRecording at multiple places? >> Goal : To record everything being written on a canvas while loading a >> page so that it can be played back on another browser. >> >> Thanks >> >> >> >> >> On Thursday, May 2, 2024 at 5:34:48 AM UTC+5:30 [email protected] wrote: >> >>> Yes - you can confirm this yourself - but we strongly recommend against >>> disabling the renderer sandbox. >>> >>> >>> On Tue, Apr 30, 2024 at 10:46 PM Steven Whelan <[email protected]> >>> wrote: >>> >>>> Yes, trying to do this in renderer process. Would it work if I run >>>> Chromium with --nosandbox flag. >>>> >>>> On Tue, Apr 30, 2024, 21:58 Ken Russell <[email protected]> wrote: >>>> >>>>> Are you trying to do this within Chrome's renderer or GPU processes? >>>>> If so, the sandbox will prevent you from touching the local disk. You >>>>> would >>>>> need to extend the sandbox policies to allow writing to a directory on >>>>> disk >>>>> - some place that will not collide with other programs, so that if a bad >>>>> actor causes data to be written to that directory, no harm will be caused. >>>>> See >>>>> https://source.chromium.org/chromium/chromium/src/+/main:sandbox/policy/mac/ >>>>> for the macOS sandbox policies. >>>>> >>>>> -Ken >>>>> >>>>> >>>>> >>>>> On Tue, Apr 30, 2024 at 8:59 AM Steven Whelan <[email protected]> >>>>> wrote: >>>>> >>>>>> Hi >>>>>> I have modified the Serialize >>>>>> <https://source.chromium.org/chromium/chromium/src/+/main:cc/paint/paint_op_buffer_serializer.cc;l=5;bpv=1;bpt=1?q=paint_op_buffer_ser&ss=chromium%2Fchromium%2Fsrc> >>>>>> method >>>>>> to Record all PaintOp as SKPicture. >>>>>> I want to replay this SKPicture on a remote browser. So, I am trying >>>>>> to save this SKPicture to a file, but I am not able to do so, since >>>>>> file.isOpen gives false. >>>>>> Please help here >>>>>> >>>>>> void PaintOpBufferSerializer::Serialize(const PaintOpBuffer& buffer, >>>>>> const std::vector<size_t>* >>>>>> offsets, >>>>>> const Preamble& preamble) { >>>>>> DCHECK_EQ(serialized_op_count_, 0u); >>>>>> >>>>>> std::unique_ptr<SkCanvas> canvas = MakeAnalysisCanvas(options_); >>>>>> // These PlaybackParams use the initial (identity) canvas matrix, >>>>>> as they are >>>>>> // only used for serializing the preamble and the initial save / >>>>>> final restore >>>>>> // SerializeBuffer will create its own PlaybackParams based on the >>>>>> >>>>>> * SkPictureRecorder recorder;* >>>>>> * SkCanvas* recordingCanvas = >>>>>> recorder.beginRecording(canvas->getLocalClipBounds()); * >>>>>> // post-preamble canvas. >>>>>> PlaybackParams params = MakeParams(canvas.get()); >>>>>> int save_count = canvas->getSaveCount(); >>>>>> Save(canvas.get(), params); >>>>>> SerializePreamble(canvas.get(), preamble, params); >>>>>> SerializeBuffer(canvas.get(), buffer, offsets); >>>>>> *SerializeBuffer(recordingCanvas, buffer, offsets);* >>>>>> >>>>>> >>>>>> *sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); >>>>>> SkSerialProcs sProcs; sk_sp<SkData> readableData = >>>>>> picture->serialize(&sProcs);* >>>>>> // Assuming the byte array is stored in the 'data' field of the >>>>>> SkData object >>>>>> const void* data = readableData->data(); >>>>>> size_t size = readableData->size(); >>>>>> >>>>>> * <HOW TO SAVE READABLE DATA TO A FILE>* >>>>>> /*sk_sp<SkData> receievedData = SkData::MakeWithoutCopy(data, size); >>>>>> sk_sp<SkPicture> copy = >>>>>> SkPicture::MakeFromData(receievedData->data(), >>>>>> receievedData->size()); >>>>>> copy->playback(recordingCanvas);*/ >>>>>> RestoreToCount(canvas.get(), save_count, params); >>>>>> } >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "blink-dev" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/97946d8b-27dc-43c4-a262-e4f6288be9d6n%40chromium.org >>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/97946d8b-27dc-43c4-a262-e4f6288be9d6n%40chromium.org?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAO%2BCLgAgnWdtj1%3D2-rksbcVr5CjsKMn3e-k_sYYCJEr%2BrU%3D0ew%40mail.gmail.com.
