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

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: 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 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 bitmap.info().fWidth, 482 bitmap.info().fWidth,
483 "y", 483 "y",
484 bitmap.info().fHeight); 484 bitmap.info().fHeight);
485 SkCanvas canvas(bitmap); 485 SkCanvas canvas(bitmap);
486 DrawSelectionRect(&canvas); 486 DrawSelectionRect(&canvas);
487 base::ResetAndReturn(&m_compositeAndReadbackCallback).Run(bitmap); 487 base::ResetAndReturn(&m_compositeAndReadbackCallback).Run(bitmap);
488 } 488 }
489 489
490 void WebTestProxyBase::CapturePixelsAsync( 490 void WebTestProxyBase::CapturePixelsAsync(
491 base::Callback<void(const SkBitmap&)> callback) { 491 base::Callback<void(const SkBitmap&)> callback) {
492 TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
493
492 m_compositeAndReadbackCallback = callback; 494 m_compositeAndReadbackCallback = callback;
493 TRACE_EVENT0("shell", "WebTestProxyBase::CapturePixelsAsync");
494 495
495 // Do a layout here because it might leave compositing mode! x.x 496 // Do a layout here because it might leave compositing mode! x.x
496 // TODO(danakj): Remove this when we have kForceCompositingMode everywhere. 497 // TODO(danakj): Remove this when we have kForceCompositingMode everywhere.
497 webWidget()->layout(); 498 webWidget()->layout();
498 499
499 if (!webWidget()->compositeAndReadbackAsync(this)) { 500 if (!webWidget()->isAcceleratedCompositingActive()) {
danakj 2014/05/05 18:35:17 This was the only way that compositeAndReadbackAsy
500 TRACE_EVENT0("shell", 501 TRACE_EVENT0("shell",
501 "WebTestProxyBase::CapturePixelsAsync " 502 "WebTestProxyBase::CapturePixelsAsync "
502 "compositeAndReadbackAsync failed"); 503 "isAcceleratedCompositingActive false");
503 didCompositeAndReadback(SkBitmap()); 504 didCompositeAndReadback(SkBitmap());
505 return;
504 } 506 }
507
508 webWidget()->compositeAndReadbackAsync(this);
505 } 509 }
506 510
507 void WebTestProxyBase::setLogConsoleOutput(bool enabled) 511 void WebTestProxyBase::setLogConsoleOutput(bool enabled)
508 { 512 {
509 m_logConsoleOutput = enabled; 513 m_logConsoleOutput = enabled;
510 } 514 }
511 515
512 void WebTestProxyBase::paintRect(const WebRect& rect) 516 void WebTestProxyBase::paintRect(const WebRect& rect)
513 { 517 {
514 DCHECK(!m_isPainting); 518 DCHECK(!m_isPainting);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 float deviceScaleFactor = webView()->deviceScaleFactor(); 594 float deviceScaleFactor = webView()->deviceScaleFactor();
591 int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor)); 595 int scaledWidth = static_cast<int>(ceil(static_cast<float>(widgetSize.width) * deviceScaleFactor));
592 int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.heigh t) * deviceScaleFactor)); 596 int scaledHeight = static_cast<int>(ceil(static_cast<float>(widgetSize.heigh t) * deviceScaleFactor));
593 // We're allocating the canvas to be non-opaque (third parameter), so we 597 // We're allocating the canvas to be non-opaque (third parameter), so we
594 // don't end up with uninitialized memory if a layout test doesn't damage 598 // don't end up with uninitialized memory if a layout test doesn't damage
595 // the entire view. 599 // the entire view.
596 m_canvas.reset(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, false)); 600 m_canvas.reset(skia::CreateBitmapCanvas(scaledWidth, scaledHeight, false));
597 return m_canvas.get(); 601 return m_canvas.get();
598 } 602 }
599 603
600 void WebTestProxyBase::display(base::Closure callback) 604 void WebTestProxyBase::DisplayForSoftwareMode(const base::Closure& callback) {
601 {
602 const blink::WebSize& size = webWidget()->size(); 605 const blink::WebSize& size = webWidget()->size();
603 WebRect rect(0, 0, size.width, size.height); 606 WebRect rect(0, 0, size.width, size.height);
604 m_paintRect = rect; 607 m_paintRect = rect;
605 paintInvalidatedRegion(); 608 paintInvalidatedRegion();
606 609
607 if (!callback.is_null()) 610 if (!callback.is_null())
608 callback.Run(); 611 callback.Run();
609 } 612 }
610 613
614 void WebTestProxyBase::DidDisplayAsync(const base::Closure& callback,
615 const SkBitmap& bitmap) {
616 if (!callback.is_null())
617 callback.Run();
618 }
619
611 void WebTestProxyBase::displayAsyncThen(base::Closure callback) 620 void WebTestProxyBase::displayAsyncThen(base::Closure callback)
612 { 621 {
613 // TODO(enne): When compositing, this should invoke a real rAF, paint, 622 TRACE_EVENT0("shell", "WebTestProxyBase::displayAsyncThen");
614 // and commit. For now, just make sure that displayAsync is actually 623
615 // async so that callers can't depend on synchronous behavior. 624 // TODO(danakj): Just call CapturePixelsAsyc when we have
616 m_delegate->postTask(new ClosureTask( 625 // kForceCompositingMode everywhere.
617 this, 626
618 base::Bind( 627 // Do a layout here because it might leave compositing mode! x.x
619 &WebTestProxyBase::display, base::Unretained(this), callback))); 628 webWidget()->layout();
629
630 if (!webWidget()->isAcceleratedCompositingActive()) {
631 TRACE_EVENT0("shell",
632 "WebTestProxyBase::displayAsyncThen "
633 "isAcceleratedCompositingActive false");
634 DisplayForSoftwareMode(callback);
635 return;
636 }
637
638 m_compositeAndReadbackCallback = base::Bind(
danakj 2014/05/05 18:35:17 I could call CapturePixelsAsync here instead of se
enne (OOO) 2014/05/05 19:55:13 Yeah, I think that'd be cleaner. Can you just mov
639 &WebTestProxyBase::DidDisplayAsync, base::Unretained(this), callback);
640 webWidget()->compositeAndReadbackAsync(this);
620 } 641 }
621 642
622 void WebTestProxyBase::discardBackingStore() 643 void WebTestProxyBase::discardBackingStore()
623 { 644 {
624 m_canvas.reset(); 645 m_canvas.reset();
625 } 646 }
626 647
627 WebMIDIClientMock* WebTestProxyBase::midiClientMock() 648 WebMIDIClientMock* WebTestProxyBase::midiClientMock()
628 { 649 {
629 if (!m_midiClient.get()) 650 if (!m_midiClient.get())
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 1317
1297 void WebTestProxyBase::resetInputMethod() 1318 void WebTestProxyBase::resetInputMethod()
1298 { 1319 {
1299 // If a composition text exists, then we need to let the browser process 1320 // If a composition text exists, then we need to let the browser process
1300 // to cancel the input method's ongoing composition session. 1321 // to cancel the input method's ongoing composition session.
1301 if (m_webWidget) 1322 if (m_webWidget)
1302 m_webWidget->confirmComposition(); 1323 m_webWidget->confirmComposition();
1303 } 1324 }
1304 1325
1305 } // namespace content 1326 } // 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