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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 27 matching lines...) Expand all
38 #include "public/platform/WebCompositorSupport.h" 38 #include "public/platform/WebCompositorSupport.h"
39 #include "public/platform/WebGraphicsContext3DProvider.h" 39 #include "public/platform/WebGraphicsContext3DProvider.h"
40 #include "public/platform/WebScheduler.h" 40 #include "public/platform/WebScheduler.h"
41 #include "public/platform/WebTraceLocation.h" 41 #include "public/platform/WebTraceLocation.h"
42 #include "skia/ext/texture_handle.h" 42 #include "skia/ext/texture_handle.h"
43 #include "third_party/skia/include/core/SkData.h" 43 #include "third_party/skia/include/core/SkData.h"
44 #include "third_party/skia/include/core/SkPictureRecorder.h" 44 #include "third_party/skia/include/core/SkPictureRecorder.h"
45 #include "third_party/skia/include/core/SkSurface.h" 45 #include "third_party/skia/include/core/SkSurface.h"
46 #include "third_party/skia/include/gpu/GrContext.h" 46 #include "third_party/skia/include/gpu/GrContext.h"
47 #include "third_party/skia/include/gpu/gl/GrGLTypes.h" 47 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
48 #include "wtf/PtrUtil.h"
49 #include <memory>
50 48
51 namespace { 49 namespace {
52 enum { 50 enum {
53 InvalidMailboxIndex = -1, 51 InvalidMailboxIndex = -1,
54 MaxCanvasAnimationBacklog = 2, // Make sure the the GPU is never more than t wo animation frames behind. 52 MaxCanvasAnimationBacklog = 2, // Make sure the the GPU is never more than t wo animation frames behind.
55 }; 53 };
56 } // namespace 54 } // namespace
57 55
58 namespace blink { 56 namespace blink {
59 57
(...skipping 23 matching lines...) Expand all
83 } else { 81 } else {
84 surface->getCanvas()->clear(SK_ColorTRANSPARENT); 82 surface->getCanvas()->clear(SK_ColorTRANSPARENT);
85 } 83 }
86 } 84 }
87 return fromSkSp(surface); 85 return fromSkSp(surface);
88 } 86 }
89 87
90 PassRefPtr<Canvas2DLayerBridge> Canvas2DLayerBridge::create(const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode ) 88 PassRefPtr<Canvas2DLayerBridge> Canvas2DLayerBridge::create(const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode )
91 { 89 {
92 TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation", TRACE_EVENT_ SCOPE_GLOBAL); 90 TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation", TRACE_EVENT_ SCOPE_GLOBAL);
93 std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(P latform::current()->createSharedOffscreenGraphicsContext3DProvider()); 91 OwnPtr<WebGraphicsContext3DProvider> contextProvider = adoptPtr(Platform::cu rrent()->createSharedOffscreenGraphicsContext3DProvider());
94 if (!contextProvider) 92 if (!contextProvider)
95 return nullptr; 93 return nullptr;
96 RefPtr<Canvas2DLayerBridge> layerBridge; 94 RefPtr<Canvas2DLayerBridge> layerBridge;
97 layerBridge = adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), s ize, msaaSampleCount, opacityMode, accelerationMode)); 95 layerBridge = adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), s ize, msaaSampleCount, opacityMode, accelerationMode));
98 return layerBridge.release(); 96 return layerBridge.release();
99 } 97 }
100 98
101 Canvas2DLayerBridge::Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DPro vider> contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode op acityMode, AccelerationMode accelerationMode) 99 Canvas2DLayerBridge::Canvas2DLayerBridge(PassOwnPtr<WebGraphicsContext3DProvider > contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode opacity Mode, AccelerationMode accelerationMode)
102 : m_contextProvider(std::move(contextProvider)) 100 : m_contextProvider(std::move(contextProvider))
103 , m_logger(wrapUnique(new Logger)) 101 , m_logger(adoptPtr(new Logger))
104 , m_weakPtrFactory(this) 102 , m_weakPtrFactory(this)
105 , m_imageBuffer(0) 103 , m_imageBuffer(0)
106 , m_msaaSampleCount(msaaSampleCount) 104 , m_msaaSampleCount(msaaSampleCount)
107 , m_bytesAllocated(0) 105 , m_bytesAllocated(0)
108 , m_haveRecordedDrawCommands(false) 106 , m_haveRecordedDrawCommands(false)
109 , m_destructionInProgress(false) 107 , m_destructionInProgress(false)
110 , m_filterQuality(kLow_SkFilterQuality) 108 , m_filterQuality(kLow_SkFilterQuality)
111 , m_isHidden(false) 109 , m_isHidden(false)
112 , m_isDeferralEnabled(true) 110 , m_isDeferralEnabled(true)
113 , m_isRegisteredTaskObserver(false) 111 , m_isRegisteredTaskObserver(false)
(...skipping 18 matching lines...) Expand all
132 clearCHROMIUMImageCache(); 130 clearCHROMIUMImageCache();
133 #endif // USE_IOSURFACE_FOR_2D_CANVAS 131 #endif // USE_IOSURFACE_FOR_2D_CANVAS
134 132
135 m_layer.reset(); 133 m_layer.reset();
136 DCHECK_EQ(0u, m_mailboxes.size()); 134 DCHECK_EQ(0u, m_mailboxes.size());
137 } 135 }
138 136
139 void Canvas2DLayerBridge::startRecording() 137 void Canvas2DLayerBridge::startRecording()
140 { 138 {
141 DCHECK(m_isDeferralEnabled); 139 DCHECK(m_isDeferralEnabled);
142 m_recorder = wrapUnique(new SkPictureRecorder); 140 m_recorder = adoptPtr(new SkPictureRecorder);
143 m_recorder->beginRecording(m_size.width(), m_size.height(), nullptr); 141 m_recorder->beginRecording(m_size.width(), m_size.height(), nullptr);
144 if (m_imageBuffer) { 142 if (m_imageBuffer) {
145 m_imageBuffer->resetCanvas(m_recorder->getRecordingCanvas()); 143 m_imageBuffer->resetCanvas(m_recorder->getRecordingCanvas());
146 } 144 }
147 m_recordingPixelCount = 0; 145 m_recordingPixelCount = 0;
148 } 146 }
149 147
150 void Canvas2DLayerBridge::setLoggerForTesting(std::unique_ptr<Logger> logger) 148 void Canvas2DLayerBridge::setLoggerForTesting(PassOwnPtr<Logger> logger)
151 { 149 {
152 m_logger = std::move(logger); 150 m_logger = std::move(logger);
153 } 151 }
154 152
155 bool Canvas2DLayerBridge::shouldAccelerate(AccelerationHint hint) const 153 bool Canvas2DLayerBridge::shouldAccelerate(AccelerationHint hint) const
156 { 154 {
157 bool accelerate; 155 bool accelerate;
158 if (m_softwareRenderingWhileHidden) 156 if (m_softwareRenderingWhileHidden)
159 accelerate = false; 157 accelerate = false;
160 else if (m_accelerationMode == ForceAccelerationForTesting) 158 else if (m_accelerationMode == ForceAccelerationForTesting)
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 wantAcceleration = false; 477 wantAcceleration = false;
480 m_softwareRenderingWhileHidden = true; 478 m_softwareRenderingWhileHidden = true;
481 } 479 }
482 480
483 m_surface = createSkSurface(wantAcceleration ? m_contextProvider->grContext( ) : nullptr, m_size, m_msaaSampleCount, m_opacityMode, &surfaceIsAccelerated); 481 m_surface = createSkSurface(wantAcceleration ? m_contextProvider->grContext( ) : nullptr, m_size, m_msaaSampleCount, m_opacityMode, &surfaceIsAccelerated);
484 482
485 if (!m_surface) 483 if (!m_surface)
486 reportSurfaceCreationFailure(); 484 reportSurfaceCreationFailure();
487 485
488 if (m_surface && surfaceIsAccelerated && !m_layer) { 486 if (m_surface && surfaceIsAccelerated && !m_layer) {
489 m_layer = wrapUnique(Platform::current()->compositorSupport()->createExt ernalTextureLayer(this)); 487 m_layer = adoptPtr(Platform::current()->compositorSupport()->createExter nalTextureLayer(this));
490 m_layer->setOpaque(m_opacityMode == Opaque); 488 m_layer->setOpaque(m_opacityMode == Opaque);
491 m_layer->setBlendBackgroundColor(m_opacityMode != Opaque); 489 m_layer->setBlendBackgroundColor(m_opacityMode != Opaque);
492 GraphicsLayer::registerContentsLayer(m_layer->layer()); 490 GraphicsLayer::registerContentsLayer(m_layer->layer());
493 m_layer->setNearestNeighbor(m_filterQuality == kNone_SkFilterQuality); 491 m_layer->setNearestNeighbor(m_filterQuality == kNone_SkFilterQuality);
494 } 492 }
495 493
496 if (m_surface && isHibernating()) { 494 if (m_surface && isHibernating()) {
497 if (surfaceIsAccelerated) { 495 if (surfaceIsAccelerated) {
498 m_logger->reportHibernationEvent(HibernationEndedNormally); 496 m_logger->reportHibernationEvent(HibernationEndedNormally);
499 } else { 497 } else {
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 741
744 bool Canvas2DLayerBridge::restoreSurface() 742 bool Canvas2DLayerBridge::restoreSurface()
745 { 743 {
746 DCHECK(!m_destructionInProgress); 744 DCHECK(!m_destructionInProgress);
747 if (m_destructionInProgress) 745 if (m_destructionInProgress)
748 return false; 746 return false;
749 DCHECK(isAccelerated() && !m_surface); 747 DCHECK(isAccelerated() && !m_surface);
750 748
751 gpu::gles2::GLES2Interface* sharedGL = nullptr; 749 gpu::gles2::GLES2Interface* sharedGL = nullptr;
752 m_layer->clearTexture(); 750 m_layer->clearTexture();
753 m_contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGra phicsContext3DProvider()); 751 m_contextProvider = adoptPtr(Platform::current()->createSharedOffscreenGraph icsContext3DProvider());
754 if (m_contextProvider) 752 if (m_contextProvider)
755 sharedGL = m_contextProvider->contextGL(); 753 sharedGL = m_contextProvider->contextGL();
756 754
757 if (sharedGL && sharedGL->GetGraphicsResetStatusKHR() == GL_NO_ERROR) { 755 if (sharedGL && sharedGL->GetGraphicsResetStatusKHR() == GL_NO_ERROR) {
758 GrContext* grCtx = m_contextProvider->grContext(); 756 GrContext* grCtx = m_contextProvider->grContext();
759 bool surfaceIsAccelerated; 757 bool surfaceIsAccelerated;
760 RefPtr<SkSurface> surface(createSkSurface(grCtx, m_size, m_msaaSampleCou nt, m_opacityMode, &surfaceIsAccelerated)); 758 RefPtr<SkSurface> surface(createSkSurface(grCtx, m_size, m_msaaSampleCou nt, m_opacityMode, &surfaceIsAccelerated));
761 759
762 if (!m_surface) 760 if (!m_surface)
763 reportSurfaceCreationFailure(); 761 reportSurfaceCreationFailure();
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 #endif // USE_IOSURFACE_FOR_2D_CANVAS 994 #endif // USE_IOSURFACE_FOR_2D_CANVAS
997 } 995 }
998 996
999 void Canvas2DLayerBridge::Logger::reportHibernationEvent(HibernationEvent event) 997 void Canvas2DLayerBridge::Logger::reportHibernationEvent(HibernationEvent event)
1000 { 998 {
1001 DEFINE_STATIC_LOCAL(EnumerationHistogram, hibernationHistogram, ("Canvas.Hib ernationEvents", HibernationEventCount)); 999 DEFINE_STATIC_LOCAL(EnumerationHistogram, hibernationHistogram, ("Canvas.Hib ernationEvents", HibernationEventCount));
1002 hibernationHistogram.count(event); 1000 hibernationHistogram.count(event);
1003 } 1001 }
1004 1002
1005 } // namespace blink 1003 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698