| 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 |