Index: content/browser/devtools/protocol/page_handler.cc |
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc |
index d472554b9e3ce1f415166559a8743ef171160182..d5a9244dc95b4123fe0e2ad4e5d1248ac2ba873a 100644 |
--- a/content/browser/devtools/protocol/page_handler.cc |
+++ b/content/browser/devtools/protocol/page_handler.cc |
@@ -145,8 +145,8 @@ void PageHandler::Detached() { |
} |
void PageHandler::OnSwapCompositorFrame( |
- const cc::CompositorFrameMetadata& frame_metadata) { |
- last_compositor_frame_metadata_ = frame_metadata; |
+ cc::CompositorFrameMetadata frame_metadata) { |
+ last_compositor_frame_metadata_ = std::move(frame_metadata); |
has_compositor_frame_metadata_ = true; |
if (screencast_enabled_) |
@@ -155,10 +155,15 @@ void PageHandler::OnSwapCompositorFrame( |
} |
void PageHandler::OnSynchronousSwapCompositorFrame( |
- const cc::CompositorFrameMetadata& frame_metadata) { |
- last_compositor_frame_metadata_ = has_compositor_frame_metadata_ ? |
- next_compositor_frame_metadata_ : frame_metadata; |
- next_compositor_frame_metadata_ = frame_metadata; |
+ cc::CompositorFrameMetadata frame_metadata) { |
+ if (has_compositor_frame_metadata_) { |
+ last_compositor_frame_metadata_ = |
+ std::move(next_compositor_frame_metadata_); |
+ } else { |
+ last_compositor_frame_metadata_ = frame_metadata.Clone(); |
+ } |
+ next_compositor_frame_metadata_ = std::move(frame_metadata); |
+ |
has_compositor_frame_metadata_ = true; |
if (screencast_enabled_) |
@@ -425,20 +430,18 @@ void PageHandler::InnerSwapCompositorFrame() { |
if (snapshot_size_dip.width() > 0 && snapshot_size_dip.height() > 0) { |
gfx::Rect viewport_bounds_dip(gfx::ToRoundedSize(viewport_size_dip)); |
view->CopyFromCompositingSurface( |
- viewport_bounds_dip, |
- snapshot_size_dip, |
+ viewport_bounds_dip, snapshot_size_dip, |
base::Bind(&PageHandler::ScreencastFrameCaptured, |
weak_factory_.GetWeakPtr(), |
- last_compositor_frame_metadata_), |
+ base::Passed(last_compositor_frame_metadata_.Clone())), |
kN32_SkColorType); |
frames_in_flight_++; |
} |
} |
-void PageHandler::ScreencastFrameCaptured( |
- const cc::CompositorFrameMetadata& metadata, |
- const SkBitmap& bitmap, |
- ReadbackResponse response) { |
+void PageHandler::ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata, |
+ const SkBitmap& bitmap, |
+ ReadbackResponse response) { |
if (response != READBACK_SUCCESS) { |
if (capture_retry_count_) { |
--capture_retry_count_; |
@@ -451,18 +454,17 @@ void PageHandler::ScreencastFrameCaptured( |
return; |
} |
base::PostTaskAndReplyWithResult( |
- base::WorkerPool::GetTaskRunner(true).get(), |
- FROM_HERE, |
- base::Bind(&EncodeScreencastFrame, |
- bitmap, screencast_format_, screencast_quality_), |
+ base::WorkerPool::GetTaskRunner(true).get(), FROM_HERE, |
+ base::Bind(&EncodeScreencastFrame, bitmap, screencast_format_, |
+ screencast_quality_), |
base::Bind(&PageHandler::ScreencastFrameEncoded, |
- weak_factory_.GetWeakPtr(), metadata, base::Time::Now())); |
+ weak_factory_.GetWeakPtr(), base::Passed(&metadata), |
+ base::Time::Now())); |
} |
-void PageHandler::ScreencastFrameEncoded( |
- const cc::CompositorFrameMetadata& metadata, |
- const base::Time& timestamp, |
- const std::string& data) { |
+void PageHandler::ScreencastFrameEncoded(cc::CompositorFrameMetadata metadata, |
+ const base::Time& timestamp, |
+ const std::string& data) { |
// Consider metadata empty in case it has no device scale factor. |
if (metadata.device_scale_factor == 0 || !host_ || data.empty()) { |
--frames_in_flight_; |