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

Side by Side Diff: content/shell/renderer/test_runner/WebTestProxy.cpp

Issue 266243002: Make displayAsyncThen use the CompositeAndReadbackAsync path. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: displayasync: rebase Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « content/shell/renderer/test_runner/WebTestProxy.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/shell/renderer/test_runner/WebTestProxy.h" 5 #include "content/shell/renderer/test_runner/WebTestProxy.h"
6 6
7 #include <cctype> 7 #include <cctype>
8 8
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 481
482 void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) { 482 void WebTestProxyBase::didCompositeAndReadback(const SkBitmap& bitmap) {
483 TRACE_EVENT2("shell", 483 TRACE_EVENT2("shell",
484 "WebTestProxyBase::didCompositeAndReadback", 484 "WebTestProxyBase::didCompositeAndReadback",
485 "x", 485 "x",
486 bitmap.info().fWidth, 486 bitmap.info().fWidth,
487 "y", 487 "y",
488 bitmap.info().fHeight); 488 bitmap.info().fHeight);
489 SkCanvas canvas(bitmap); 489 SkCanvas canvas(bitmap);
490 DrawSelectionRect(&canvas); 490 DrawSelectionRect(&canvas);
491 DCHECK(!m_compositeAndReadbackCallback.is_null()); 491 DCHECK(!m_compositeAndReadbackCallbacks.empty());
492 base::ResetAndReturn(&m_compositeAndReadbackCallback).Run(bitmap); 492 m_compositeAndReadbackCallbacks.front().Run(bitmap);
493 m_compositeAndReadbackCallbacks.pop_front();
493 } 494 }
494 495
495 void WebTestProxyBase::CapturePixelsAsync( 496 void WebTestProxyBase::CapturePixelsAsync(
496 base::Callback<void(const SkBitmap&)> callback) { 497 base::Callback<void(const SkBitmap&)> callback) {
497 TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync"); 498 TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
498 499
499 DCHECK(webWidget()->isAcceleratedCompositingActive()); 500 DCHECK(webWidget()->isAcceleratedCompositingActive());
500 DCHECK(!callback.is_null()); 501 DCHECK(!callback.is_null());
501 DCHECK(m_compositeAndReadbackCallback.is_null()); 502 m_compositeAndReadbackCallbacks.push_back(callback);
502 m_compositeAndReadbackCallback = callback;
503 webWidget()->compositeAndReadbackAsync(this); 503 webWidget()->compositeAndReadbackAsync(this);
504 } 504 }
505 505
506 void WebTestProxyBase::setLogConsoleOutput(bool enabled) 506 void WebTestProxyBase::setLogConsoleOutput(bool enabled)
507 { 507 {
508 m_logConsoleOutput = enabled; 508 m_logConsoleOutput = enabled;
509 } 509 }
510 510
511 void WebTestProxyBase::paintRect(const WebRect& rect) 511 void WebTestProxyBase::paintRect(const WebRect& rect)
512 { 512 {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 float deviceScaleFactor = webView()->deviceScaleFactor(); 589 float deviceScaleFactor = webView()->deviceScaleFactor();
590 int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor)); 590 int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor));
591 int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.heigh t) * deviceScaleFactor)); 591 int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.heigh t) * deviceScaleFactor));
592 // We're allocating the canvas to be non-opaque (third parameter), so we 592 // We're allocating the canvas to be non-opaque (third parameter), so we
593 // don't end up with uninitialized memory if a layout test doesn't damage 593 // don't end up with uninitialized memory if a layout test doesn't damage
594 // the entire view. 594 // the entire view.
595 m_canvas.reset(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, false)); 595 m_canvas.reset(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, false));
596 return m_canvas.get(); 596 return m_canvas.get();
597 } 597 }
598 598
599 void WebTestProxyBase::display(base::Closure callback) 599 void WebTestProxyBase::DisplayForSoftwareMode(const base::Closure& callback) {
600 { 600 const blink::WebSize& size = webWidget()->size();
601 const blink::WebSize& size = webWidget()->size(); 601 WebRect rect(0, 0, size.width, size.height);
602 WebRect rect(0, 0, size.width, size.height); 602 m_paintRect = rect;
603 m_paintRect = rect; 603 paintInvalidatedRegion();
604 paintInvalidatedRegion();
605 604
606 if (!callback.is_null()) 605 if (!callback.is_null())
607 callback.Run(); 606 callback.Run();
608 } 607 }
609 608
610 void WebTestProxyBase::displayAsyncThen(base::Closure callback) 609 void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback,
611 { 610 const SkBitmap& bitmap) {
612 // TODO(enne): When compositing, this should invoke a real rAF, paint, 611 // Verify we actually composited.
613 // and commit. For now, just make sure that displayAsync is actually 612 CHECK_NE(0, bitmap.info().fWidth);
614 // async so that callers can't depend on synchronous behavior. 613 CHECK_NE(0, bitmap.info().fHeight);
615 m_delegate->postTask(new ClosureTask( 614 if (!callback.is_null())
616 this, 615 callback.Run();
617 base::Bind( 616 }
618 &WebTestProxyBase::display, base::Unretained(this), callback))); 617
618 void WebTestProxyBase::displayAsyncThen(base::Closure callback) {
619 TRACE_EVENT0("shell", "WebTestProxyBase::displayAsyncThen");
620
621 // TODO(danakj): Remove when we have kForceCompositingMode everywhere.
622 if (!webWidget()->isAcceleratedCompositingActive()) {
623 TRACE_EVENT0("shell",
624 "WebTestProxyBase::displayAsyncThen "
625 "isAcceleratedCompositingActive false");
626 m_delegate->postTask(
627 new ClosureTask(this,
628 base::Bind(&WebTestProxyBase::DisplayForSoftwareMode,
629 base::Unretained(this),
630 callback)));
631 return;
632 }
633
634 CapturePixelsAsync(base::Bind(
635 &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback));
619 } 636 }
620 637
621 void WebTestProxyBase::discardBackingStore() 638 void WebTestProxyBase::discardBackingStore()
622 { 639 {
623 m_canvas.reset(); 640 m_canvas.reset();
624 } 641 }
625 642
626 WebMIDIClientMock* WebTestProxyBase::midiClientMock() 643 WebMIDIClientMock* WebTestProxyBase::midiClientMock()
627 { 644 {
628 if (!m_midiClient.get()) 645 if (!m_midiClient.get())
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 1312
1296 void WebTestProxyBase::resetInputMethod() 1313 void WebTestProxyBase::resetInputMethod()
1297 { 1314 {
1298 // If a composition text exists, then we need to let the browser process 1315 // If a composition text exists, then we need to let the browser process
1299 // to cancel the input method's ongoing composition session. 1316 // to cancel the input method's ongoing composition session.
1300 if (m_webWidget) 1317 if (m_webWidget)
1301 m_webWidget->confirmComposition(); 1318 m_webWidget->confirmComposition();
1302 } 1319 }
1303 1320
1304 } // namespace content 1321 } // namespace content
OLDNEW
« no previous file with comments | « content/shell/renderer/test_runner/WebTestProxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698