| OLD | NEW | 
|---|
| 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 22 matching lines...) Expand all  Loading... | 
| 33 #include "public/platform/WebExternalTextureLayerClient.h" | 33 #include "public/platform/WebExternalTextureLayerClient.h" | 
| 34 #include "public/platform/WebExternalTextureMailbox.h" | 34 #include "public/platform/WebExternalTextureMailbox.h" | 
| 35 #include "public/platform/WebThread.h" | 35 #include "public/platform/WebThread.h" | 
| 36 #include "third_party/khronos/GLES2/gl2.h" | 36 #include "third_party/khronos/GLES2/gl2.h" | 
| 37 #include "third_party/skia/include/core/SkImage.h" | 37 #include "third_party/skia/include/core/SkImage.h" | 
| 38 #include "wtf/Allocator.h" | 38 #include "wtf/Allocator.h" | 
| 39 #include "wtf/Deque.h" | 39 #include "wtf/Deque.h" | 
| 40 #include "wtf/PassOwnPtr.h" | 40 #include "wtf/PassOwnPtr.h" | 
| 41 #include "wtf/RefCounted.h" | 41 #include "wtf/RefCounted.h" | 
| 42 #include "wtf/RefPtr.h" | 42 #include "wtf/RefPtr.h" | 
|  | 43 #include "wtf/WeakPtr.h" | 
| 43 | 44 | 
| 44 class SkPictureRecorder; | 45 class SkPictureRecorder; | 
| 45 | 46 | 
| 46 namespace blink { | 47 namespace blink { | 
| 47 | 48 | 
|  | 49 class Canvas2DLayerBridgeHistogramLogger; | 
| 48 class Canvas2DLayerBridgeTest; | 50 class Canvas2DLayerBridgeTest; | 
| 49 class ImageBuffer; | 51 class ImageBuffer; | 
| 50 class WebGraphicsContext3D; | 52 class WebGraphicsContext3D; | 
| 51 class WebGraphicsContext3DProvider; | 53 class WebGraphicsContext3DProvider; | 
| 52 class SharedContextRateLimiter; | 54 class SharedContextRateLimiter; | 
| 53 | 55 | 
| 54 class PLATFORM_EXPORT Canvas2DLayerBridge : public WebExternalTextureLayerClient
     , public WebThread::TaskObserver, public RefCounted<Canvas2DLayerBridge> { | 56 class PLATFORM_EXPORT Canvas2DLayerBridge : public WebExternalTextureLayerClient
     , public WebThread::TaskObserver, public RefCounted<Canvas2DLayerBridge> { | 
| 55     WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge); | 57     WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge); | 
| 56 public: | 58 public: | 
| 57     enum AccelerationMode { | 59     enum AccelerationMode { | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 83     void setIsHidden(bool); | 85     void setIsHidden(bool); | 
| 84     void setImageBuffer(ImageBuffer*); | 86     void setImageBuffer(ImageBuffer*); | 
| 85     void didDraw(const FloatRect&); | 87     void didDraw(const FloatRect&); | 
| 86     bool writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, in
     t x, int y); | 88     bool writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, in
     t x, int y); | 
| 87     void flush(); | 89     void flush(); | 
| 88     void flushGpu(); | 90     void flushGpu(); | 
| 89     void prepareSurfaceForPaintingIfNeeded(); | 91     void prepareSurfaceForPaintingIfNeeded(); | 
| 90     bool isHidden() { return m_isHidden; } | 92     bool isHidden() { return m_isHidden; } | 
| 91 | 93 | 
| 92     void beginDestruction(); | 94     void beginDestruction(); | 
|  | 95     void hibernate(); | 
|  | 96     bool isHibernating() const { return m_hibernationImage; } | 
| 93 | 97 | 
| 94     PassRefPtr<SkImage> newImageSnapshot(AccelerationHint); | 98     PassRefPtr<SkImage> newImageSnapshot(AccelerationHint); | 
| 95 | 99 | 
|  | 100     // The values of the enum entries must not change because they are used for | 
|  | 101     // usage metrics histograms. New values can be added to the end. | 
|  | 102     enum HibernationEvent { | 
|  | 103         HibernationScheduled = 0, | 
|  | 104         HibernationAbortedDueToDestructionWhileHibernatePending = 1, | 
|  | 105         HibernationAbortedDueToPendingDestruction = 2, | 
|  | 106         HibernationAbortedDueToVisibilityChange = 3, | 
|  | 107         HibernationAbortedDueGpuContextLoss = 4, | 
|  | 108         HibernationAbortedDueToSwitchToUnacceleratedRendering = 5, | 
|  | 109         HibernationAbortedDueToAllocationFailure = 6, | 
|  | 110         HibernationEndedNormally = 7, | 
|  | 111         HibernationEndedWithSwitchToBackgroundRendering = 8, | 
|  | 112         HibernationEndedWithFallbackToSW = 9, | 
|  | 113         HibernationEndedWithTeardown = 10, | 
|  | 114 | 
|  | 115         HibernationEventCount = 11, | 
|  | 116     }; | 
|  | 117 | 
|  | 118     class PLATFORM_EXPORT Logger { | 
|  | 119     public: | 
|  | 120         virtual void reportHibernationEvent(HibernationEvent); | 
|  | 121         virtual void didStartHibernating() { } | 
|  | 122         virtual ~Logger() { } | 
|  | 123     }; | 
|  | 124 | 
|  | 125     void setLoggerForTesting(PassOwnPtr<Logger>); | 
|  | 126 | 
| 96 private: | 127 private: | 
| 97     Canvas2DLayerBridge(PassOwnPtr<WebGraphicsContext3DProvider>, const IntSize&
     , int msaaSampleCount, OpacityMode, AccelerationMode); | 128     Canvas2DLayerBridge(PassOwnPtr<WebGraphicsContext3DProvider>, const IntSize&
     , int msaaSampleCount, OpacityMode, AccelerationMode); | 
| 98     WebGraphicsContext3D* context(); | 129     WebGraphicsContext3D* context(); | 
| 99     void startRecording(); | 130     void startRecording(); | 
| 100     void skipQueuedDrawCommands(); | 131     void skipQueuedDrawCommands(); | 
| 101     void flushRecordingOnly(); | 132     void flushRecordingOnly(); | 
| 102     void unregisterTaskObserver(); | 133     void unregisterTaskObserver(); | 
| 103 | 134 | 
| 104     // WebThread::TaskOberver implementation | 135     // WebThread::TaskOberver implementation | 
| 105     void willProcessTask() override; | 136     void willProcessTask() override; | 
| 106     void didProcessTask() override; | 137     void didProcessTask() override; | 
| 107 | 138 | 
| 108     SkSurface* getOrCreateSurface(AccelerationHint = PreferAcceleration); | 139     SkSurface* getOrCreateSurface(AccelerationHint = PreferAcceleration); | 
| 109     bool shouldAccelerate(AccelerationHint) const; | 140     bool shouldAccelerate(AccelerationHint) const; | 
| 110 | 141 | 
| 111     OwnPtr<SkPictureRecorder> m_recorder; | 142     OwnPtr<SkPictureRecorder> m_recorder; | 
| 112     RefPtr<SkSurface> m_surface; | 143     RefPtr<SkSurface> m_surface; | 
|  | 144     RefPtr<SkImage> m_hibernationImage; | 
| 113     int m_initialSurfaceSaveCount; | 145     int m_initialSurfaceSaveCount; | 
| 114     OwnPtr<WebExternalTextureLayer> m_layer; | 146     OwnPtr<WebExternalTextureLayer> m_layer; | 
| 115     OwnPtr<WebGraphicsContext3DProvider> m_contextProvider; | 147     OwnPtr<WebGraphicsContext3DProvider> m_contextProvider; | 
| 116     OwnPtr<SharedContextRateLimiter> m_rateLimiter; | 148     OwnPtr<SharedContextRateLimiter> m_rateLimiter; | 
|  | 149     OwnPtr<Logger> m_logger; | 
|  | 150     WeakPtrFactory<Canvas2DLayerBridge> m_weakPtrFactory; | 
| 117     ImageBuffer* m_imageBuffer; | 151     ImageBuffer* m_imageBuffer; | 
| 118     int m_msaaSampleCount; | 152     int m_msaaSampleCount; | 
| 119     size_t m_bytesAllocated; | 153     size_t m_bytesAllocated; | 
| 120     bool m_haveRecordedDrawCommands; | 154     bool m_haveRecordedDrawCommands; | 
| 121     bool m_destructionInProgress; | 155     bool m_destructionInProgress; | 
| 122     SkFilterQuality m_filterQuality; | 156     SkFilterQuality m_filterQuality; | 
| 123     bool m_isHidden; | 157     bool m_isHidden; | 
| 124     bool m_isDeferralEnabled; | 158     bool m_isDeferralEnabled; | 
| 125     bool m_isRegisteredTaskObserver; | 159     bool m_isRegisteredTaskObserver; | 
| 126     bool m_renderingTaskCompletedForCurrentFrame; | 160     bool m_renderingTaskCompletedForCurrentFrame; | 
|  | 161     bool m_softwareRenderingWhileHidden; | 
| 127 | 162 | 
| 128     friend class Canvas2DLayerBridgeTest; | 163     friend class Canvas2DLayerBridgeTest; | 
| 129 | 164 | 
| 130     struct MailboxInfo { | 165     struct MailboxInfo { | 
| 131         DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 166         DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 
| 132         WebExternalTextureMailbox m_mailbox; | 167         WebExternalTextureMailbox m_mailbox; | 
| 133         RefPtr<SkImage> m_image; | 168         RefPtr<SkImage> m_image; | 
| 134         RefPtr<Canvas2DLayerBridge> m_parentLayerBridge; | 169         RefPtr<Canvas2DLayerBridge> m_parentLayerBridge; | 
| 135 | 170 | 
| 136         MailboxInfo(const MailboxInfo&); | 171         MailboxInfo(const MailboxInfo&); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 149     GLenum m_lastFilter; | 184     GLenum m_lastFilter; | 
| 150     AccelerationMode m_accelerationMode; | 185     AccelerationMode m_accelerationMode; | 
| 151     OpacityMode m_opacityMode; | 186     OpacityMode m_opacityMode; | 
| 152     IntSize m_size; | 187     IntSize m_size; | 
| 153     int m_recordingPixelCount; | 188     int m_recordingPixelCount; | 
| 154 }; | 189 }; | 
| 155 | 190 | 
| 156 } // namespace blink | 191 } // namespace blink | 
| 157 | 192 | 
| 158 #endif | 193 #endif | 
| OLD | NEW | 
|---|