OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/devtools/protocol/page_handler.h" | 5 #include "content/browser/devtools/protocol/page_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 | 138 |
139 void PageHandler::SetClient(std::unique_ptr<Client> client) { | 139 void PageHandler::SetClient(std::unique_ptr<Client> client) { |
140 client_.swap(client); | 140 client_.swap(client); |
141 } | 141 } |
142 | 142 |
143 void PageHandler::Detached() { | 143 void PageHandler::Detached() { |
144 Disable(); | 144 Disable(); |
145 } | 145 } |
146 | 146 |
147 void PageHandler::OnSwapCompositorFrame( | 147 void PageHandler::OnSwapCompositorFrame( |
148 const cc::CompositorFrameMetadata& frame_metadata) { | 148 cc::CompositorFrameMetadata frame_metadata) { |
149 last_compositor_frame_metadata_ = frame_metadata; | 149 last_compositor_frame_metadata_ = std::move(frame_metadata); |
150 has_compositor_frame_metadata_ = true; | 150 has_compositor_frame_metadata_ = true; |
151 | 151 |
152 if (screencast_enabled_) | 152 if (screencast_enabled_) |
153 InnerSwapCompositorFrame(); | 153 InnerSwapCompositorFrame(); |
154 color_picker_->OnSwapCompositorFrame(); | 154 color_picker_->OnSwapCompositorFrame(); |
155 } | 155 } |
156 | 156 |
157 void PageHandler::OnSynchronousSwapCompositorFrame( | 157 void PageHandler::OnSynchronousSwapCompositorFrame( |
158 const cc::CompositorFrameMetadata& frame_metadata) { | 158 cc::CompositorFrameMetadata frame_metadata) { |
159 last_compositor_frame_metadata_ = has_compositor_frame_metadata_ ? | 159 if (has_compositor_frame_metadata_) { |
160 next_compositor_frame_metadata_ : frame_metadata; | 160 last_compositor_frame_metadata_ = |
161 next_compositor_frame_metadata_ = frame_metadata; | 161 std::move(next_compositor_frame_metadata_); |
| 162 } else { |
| 163 last_compositor_frame_metadata_ = frame_metadata.Clone(); |
| 164 } |
| 165 next_compositor_frame_metadata_ = std::move(frame_metadata); |
| 166 |
162 has_compositor_frame_metadata_ = true; | 167 has_compositor_frame_metadata_ = true; |
163 | 168 |
164 if (screencast_enabled_) | 169 if (screencast_enabled_) |
165 InnerSwapCompositorFrame(); | 170 InnerSwapCompositorFrame(); |
166 color_picker_->OnSwapCompositorFrame(); | 171 color_picker_->OnSwapCompositorFrame(); |
167 } | 172 } |
168 | 173 |
169 void PageHandler::Observe(int type, | 174 void PageHandler::Observe(int type, |
170 const NotificationSource& source, | 175 const NotificationSource& source, |
171 const NotificationDetails& details) { | 176 const NotificationDetails& details) { |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 | 423 |
419 if (scale <= 0) | 424 if (scale <= 0) |
420 scale = 0.1; | 425 scale = 0.1; |
421 | 426 |
422 gfx::Size snapshot_size_dip(gfx::ToRoundedSize( | 427 gfx::Size snapshot_size_dip(gfx::ToRoundedSize( |
423 gfx::ScaleSize(viewport_size_dip, scale))); | 428 gfx::ScaleSize(viewport_size_dip, scale))); |
424 | 429 |
425 if (snapshot_size_dip.width() > 0 && snapshot_size_dip.height() > 0) { | 430 if (snapshot_size_dip.width() > 0 && snapshot_size_dip.height() > 0) { |
426 gfx::Rect viewport_bounds_dip(gfx::ToRoundedSize(viewport_size_dip)); | 431 gfx::Rect viewport_bounds_dip(gfx::ToRoundedSize(viewport_size_dip)); |
427 view->CopyFromCompositingSurface( | 432 view->CopyFromCompositingSurface( |
428 viewport_bounds_dip, | 433 viewport_bounds_dip, snapshot_size_dip, |
429 snapshot_size_dip, | |
430 base::Bind(&PageHandler::ScreencastFrameCaptured, | 434 base::Bind(&PageHandler::ScreencastFrameCaptured, |
431 weak_factory_.GetWeakPtr(), | 435 weak_factory_.GetWeakPtr(), |
432 last_compositor_frame_metadata_), | 436 base::Passed(last_compositor_frame_metadata_.Clone())), |
433 kN32_SkColorType); | 437 kN32_SkColorType); |
434 frames_in_flight_++; | 438 frames_in_flight_++; |
435 } | 439 } |
436 } | 440 } |
437 | 441 |
438 void PageHandler::ScreencastFrameCaptured( | 442 void PageHandler::ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata, |
439 const cc::CompositorFrameMetadata& metadata, | 443 const SkBitmap& bitmap, |
440 const SkBitmap& bitmap, | 444 ReadbackResponse response) { |
441 ReadbackResponse response) { | |
442 if (response != READBACK_SUCCESS) { | 445 if (response != READBACK_SUCCESS) { |
443 if (capture_retry_count_) { | 446 if (capture_retry_count_) { |
444 --capture_retry_count_; | 447 --capture_retry_count_; |
445 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 448 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
446 FROM_HERE, base::Bind(&PageHandler::InnerSwapCompositorFrame, | 449 FROM_HERE, base::Bind(&PageHandler::InnerSwapCompositorFrame, |
447 weak_factory_.GetWeakPtr()), | 450 weak_factory_.GetWeakPtr()), |
448 base::TimeDelta::FromMilliseconds(kFrameRetryDelayMs)); | 451 base::TimeDelta::FromMilliseconds(kFrameRetryDelayMs)); |
449 } | 452 } |
450 --frames_in_flight_; | 453 --frames_in_flight_; |
451 return; | 454 return; |
452 } | 455 } |
453 base::PostTaskAndReplyWithResult( | 456 base::PostTaskAndReplyWithResult( |
454 base::WorkerPool::GetTaskRunner(true).get(), | 457 base::WorkerPool::GetTaskRunner(true).get(), FROM_HERE, |
455 FROM_HERE, | 458 base::Bind(&EncodeScreencastFrame, bitmap, screencast_format_, |
456 base::Bind(&EncodeScreencastFrame, | 459 screencast_quality_), |
457 bitmap, screencast_format_, screencast_quality_), | |
458 base::Bind(&PageHandler::ScreencastFrameEncoded, | 460 base::Bind(&PageHandler::ScreencastFrameEncoded, |
459 weak_factory_.GetWeakPtr(), metadata, base::Time::Now())); | 461 weak_factory_.GetWeakPtr(), base::Passed(&metadata), |
| 462 base::Time::Now())); |
460 } | 463 } |
461 | 464 |
462 void PageHandler::ScreencastFrameEncoded( | 465 void PageHandler::ScreencastFrameEncoded(cc::CompositorFrameMetadata metadata, |
463 const cc::CompositorFrameMetadata& metadata, | 466 const base::Time& timestamp, |
464 const base::Time& timestamp, | 467 const std::string& data) { |
465 const std::string& data) { | |
466 // Consider metadata empty in case it has no device scale factor. | 468 // Consider metadata empty in case it has no device scale factor. |
467 if (metadata.device_scale_factor == 0 || !host_ || data.empty()) { | 469 if (metadata.device_scale_factor == 0 || !host_ || data.empty()) { |
468 --frames_in_flight_; | 470 --frames_in_flight_; |
469 return; | 471 return; |
470 } | 472 } |
471 | 473 |
472 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 474 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( |
473 host_->GetView()); | 475 host_->GetView()); |
474 if (!view) { | 476 if (!view) { |
475 --frames_in_flight_; | 477 --frames_in_flight_; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 | 516 |
515 void PageHandler::OnColorPicked(int r, int g, int b, int a) { | 517 void PageHandler::OnColorPicked(int r, int g, int b, int a) { |
516 scoped_refptr<dom::RGBA> color = | 518 scoped_refptr<dom::RGBA> color = |
517 dom::RGBA::Create()->set_r(r)->set_g(g)->set_b(b)->set_a(a); | 519 dom::RGBA::Create()->set_r(r)->set_g(g)->set_b(b)->set_a(a); |
518 client_->ColorPicked(ColorPickedParams::Create()->set_color(color)); | 520 client_->ColorPicked(ColorPickedParams::Create()->set_color(color)); |
519 } | 521 } |
520 | 522 |
521 } // namespace page | 523 } // namespace page |
522 } // namespace devtools | 524 } // namespace devtools |
523 } // namespace content | 525 } // namespace content |
OLD | NEW |