diff options
author | Xin Li <delphij@google.com> | 2020-08-31 21:21:38 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2020-08-31 21:21:38 -0700 |
commit | 628590d7ec80e10a3fc24b1c18a1afb55cca10a8 (patch) | |
tree | 4b1c3f52d86d7fb53afbe9e9438468588fa489f8 /libs/hwui/renderthread/CanvasContext.h | |
parent | b11b8ec3aec8bb42f2c07e1c5ac7942da293baa8 (diff) | |
parent | d2d3a20624d968199353ccf6ddbae6f3ac39c9af (diff) |
Merge Android R (rvc-dev-plus-aosp-without-vendor@6692709)
Bug: 166295507
Merged-In: I3d92a6de21a938f6b352ec26dc23420c0fe02b27
Change-Id: Ifdb80563ef042738778ebb8a7581a97c4e3d96e2
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.h')
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.h | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h index a0233ca357aa..0f1b8aebf56c 100644 --- a/libs/hwui/renderthread/CanvasContext.h +++ b/libs/hwui/renderthread/CanvasContext.h @@ -22,25 +22,26 @@ #include "FrameMetricsReporter.h" #include "IContextFactory.h" #include "IRenderPipeline.h" +#include "JankTracker.h" #include "LayerUpdateQueue.h" #include "Lighting.h" #include "ReliableSurface.h" #include "RenderNode.h" #include "renderthread/RenderTask.h" #include "renderthread/RenderThread.h" +#include "utils/RingBuffer.h" -#include <EGL/egl.h> #include <SkBitmap.h> #include <SkRect.h> #include <SkSize.h> #include <cutils/compiler.h> -#include <gui/Surface.h> #include <utils/Functor.h> #include <functional> #include <future> #include <set> #include <string> +#include <utility> #include <vector> namespace android { @@ -55,7 +56,6 @@ class RenderState; namespace renderthread { -class EglManager; class Frame; // This per-renderer class manages the bridge between the global EGL context @@ -110,7 +110,7 @@ public: // Won't take effect until next EGLSurface creation void setSwapBehavior(SwapBehavior swapBehavior); - void setSurface(sp<Surface>&& surface, bool enableTimeout = true); + void setSurface(ANativeWindow* window, bool enableTimeout = true); bool pauseSurface(); void setStopped(bool stopped); bool hasSurface() const { return mNativeSurface.get(); } @@ -152,8 +152,6 @@ public: void setContentDrawBounds(const Rect& bounds) { mContentDrawBounds = bounds; } - RenderState& getRenderState() { return mRenderThread.renderState(); } - void addFrameMetricsObserver(FrameMetricsObserver* observer) { if (mFrameMetricsReporter.get() == nullptr) { mFrameMetricsReporter.reset(new FrameMetricsReporter()); @@ -216,11 +214,12 @@ private: SkRect computeDirtyRect(const Frame& frame, SkRect* dirty); - EGLint mLastFrameWidth = 0; - EGLint mLastFrameHeight = 0; + // The same type as Frame.mWidth and Frame.mHeight + int32_t mLastFrameWidth = 0; + int32_t mLastFrameHeight = 0; RenderThread& mRenderThread; - sp<ReliableSurface> mNativeSurface; + std::unique_ptr<ReliableSurface> mNativeSurface; // stopped indicates the CanvasContext will reject actual redraw operations, // and defer repaint until it is un-stopped bool mStopped = false; @@ -242,14 +241,15 @@ private: nsecs_t queueDuration; }; - RingBuffer<SwapHistory, 3> mSwapHistory; + // Need at least 4 because we do quad buffer. Add a 5th for good measure. + RingBuffer<SwapHistory, 5> mSwapHistory; int64_t mFrameNumber = -1; + int64_t mDamageId = 0; // last vsync for a dropped frame due to stuffed queue nsecs_t mLastDropVsync = 0; bool mOpaque; - bool mWideColorGamut = false; bool mUseForceDark = false; LightInfo mLightInfo; LightGeometry mLightGeometry = {{0, 0, 0}, 0}; @@ -262,6 +262,7 @@ private: std::vector<sp<RenderNode>> mRenderNodes; FrameInfo* mCurrentFrameInfo = nullptr; + RingBuffer<std::pair<FrameInfo*, int64_t>, 4> mLast4FrameInfos; std::string mName; JankTracker mJankTracker; FrameInfoVisualizer mProfiler; |