Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: content/browser/devtools/protocol/page_handler.cc

Issue 2096493002: Make cc::CompositorFrames movable [Part 1 of 2] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Dana's nits Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/devtools/protocol/page_handler.h ('k') | content/browser/devtools/render_frame_devtools_agent_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698