mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This deletes invalidateRect and all it's callers. There are no logic changes, just deletes. R=esprehn@chromium.org Review URL: https://codereview.chromium.org/842113005
146 lines
5.6 KiB
C++
146 lines
5.6 KiB
C++
/*
|
|
* Copyright (C) 2012 Google Inc. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef SKY_ENGINE_PLATFORM_GRAPHICS_CANVAS2DLAYERBRIDGE_H_
|
|
#define SKY_ENGINE_PLATFORM_GRAPHICS_CANVAS2DLAYERBRIDGE_H_
|
|
|
|
#include "sky/engine/platform/PlatformExport.h"
|
|
#include "sky/engine/platform/geometry/IntSize.h"
|
|
#include "sky/engine/platform/graphics/ImageBufferSurface.h"
|
|
#include "sky/engine/public/platform/WebExternalTextureLayer.h"
|
|
#include "sky/engine/public/platform/WebExternalTextureLayerClient.h"
|
|
#include "sky/engine/public/platform/WebExternalTextureMailbox.h"
|
|
#include "sky/engine/wtf/DoublyLinkedList.h"
|
|
#include "sky/engine/wtf/PassOwnPtr.h"
|
|
#include "sky/engine/wtf/RefCounted.h"
|
|
#include "sky/engine/wtf/RefPtr.h"
|
|
#include "third_party/khronos/GLES2/gl2.h"
|
|
#include "third_party/skia/include/core/SkImage.h"
|
|
#include "third_party/skia/include/utils/SkDeferredCanvas.h"
|
|
|
|
class Canvas2DLayerBridgeTest;
|
|
|
|
namespace blink {
|
|
|
|
class ImageBuffer;
|
|
class WebGraphicsContext3D;
|
|
class WebGraphicsContext3DProvider;
|
|
|
|
class PLATFORM_EXPORT Canvas2DLayerBridge : public WebExternalTextureLayerClient, public SkDeferredCanvas::NotificationClient, public DoublyLinkedListNode<Canvas2DLayerBridge>, public RefCounted<Canvas2DLayerBridge> {
|
|
WTF_MAKE_NONCOPYABLE(Canvas2DLayerBridge);
|
|
public:
|
|
static PassRefPtr<Canvas2DLayerBridge> create(const IntSize&, OpacityMode, int msaaSampleCount);
|
|
|
|
virtual ~Canvas2DLayerBridge();
|
|
|
|
// WebExternalTextureLayerClient implementation.
|
|
virtual bool prepareMailbox(WebExternalTextureMailbox*, WebExternalBitmap*) override;
|
|
virtual void mailboxReleased(const WebExternalTextureMailbox&, bool lostResource) override;
|
|
|
|
// SkDeferredCanvas::NotificationClient implementation
|
|
virtual void prepareForDraw() override;
|
|
virtual void storageAllocatedForRecordingChanged(size_t) override;
|
|
virtual void flushedDrawCommands() override;
|
|
virtual void skippedPendingDrawCommands() override;
|
|
|
|
// ImageBufferSurface implementation
|
|
void finalizeFrame();
|
|
void willAccessPixels();
|
|
SkCanvas* canvas() const { return m_canvas.get(); }
|
|
bool checkSurfaceValid();
|
|
bool restoreSurface();
|
|
WebLayer* layer() const;
|
|
Platform3DObject getBackingTexture();
|
|
bool isAccelerated() const { return true; }
|
|
void setIsHidden(bool);
|
|
void setImageBuffer(ImageBuffer* imageBuffer) { m_imageBuffer = imageBuffer; }
|
|
|
|
// Methods used by Canvas2DLayerManager
|
|
virtual size_t freeMemoryIfPossible(size_t); // virtual for mocking
|
|
virtual void flush(); // virtual for mocking
|
|
virtual size_t storageAllocatedForRecording(); // virtual for faking
|
|
size_t bytesAllocated() const { return m_bytesAllocated; }
|
|
void limitPendingFrames();
|
|
void freeReleasedMailbox();
|
|
bool hasReleasedMailbox() const;
|
|
void freeTransientResources();
|
|
bool hasTransientResources() const;
|
|
bool isHidden() { return m_isHidden; }
|
|
|
|
void beginDestruction();
|
|
|
|
protected:
|
|
Canvas2DLayerBridge(PassOwnPtr<WebGraphicsContext3DProvider>, PassOwnPtr<SkDeferredCanvas>, PassRefPtr<SkSurface>, int, OpacityMode);
|
|
void setRateLimitingEnabled(bool);
|
|
bool releasedMailboxHasExpired();
|
|
WebGraphicsContext3D* context();
|
|
|
|
OwnPtr<SkDeferredCanvas> m_canvas;
|
|
RefPtr<SkSurface> m_surface;
|
|
OwnPtr<WebExternalTextureLayer> m_layer;
|
|
OwnPtr<WebGraphicsContext3DProvider> m_contextProvider;
|
|
ImageBuffer* m_imageBuffer;
|
|
int m_msaaSampleCount;
|
|
size_t m_bytesAllocated;
|
|
bool m_didRecordDrawCommand;
|
|
bool m_isSurfaceValid;
|
|
int m_framesPending;
|
|
int m_framesSinceMailboxRelease;
|
|
bool m_destructionInProgress;
|
|
bool m_rateLimitingEnabled;
|
|
bool m_isHidden;
|
|
|
|
friend class WTF::DoublyLinkedListNode<Canvas2DLayerBridge>;
|
|
friend class ::Canvas2DLayerBridgeTest;
|
|
Canvas2DLayerBridge* m_next;
|
|
Canvas2DLayerBridge* m_prev;
|
|
|
|
enum MailboxStatus {
|
|
MailboxInUse,
|
|
MailboxReleased,
|
|
MailboxAvailable,
|
|
};
|
|
|
|
struct MailboxInfo {
|
|
WebExternalTextureMailbox m_mailbox;
|
|
RefPtr<SkImage> m_image;
|
|
MailboxStatus m_status;
|
|
RefPtr<Canvas2DLayerBridge> m_parentLayerBridge;
|
|
|
|
MailboxInfo(const MailboxInfo&);
|
|
MailboxInfo() {}
|
|
};
|
|
MailboxInfo* createMailboxInfo();
|
|
MailboxInfo* releasedMailboxInfo();
|
|
|
|
uint32_t m_lastImageId;
|
|
Vector<MailboxInfo> m_mailboxes;
|
|
int m_releasedMailboxInfoIndex;
|
|
};
|
|
|
|
} // namespace blink
|
|
|
|
#endif // SKY_ENGINE_PLATFORM_GRAPHICS_CANVAS2DLAYERBRIDGE_H_
|