Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f039afd1 authored by John Reck's avatar John Reck Committed by Android Git Automerger
Browse files

am a47c3cc5: Merge "Remove sync flush"

* commit 'a47c3cc5':
  Remove sync flush
parents 584a7aa6 a47c3cc5
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* rendere

DeferredLayerUpdater::~DeferredLayerUpdater() {
    SkSafeUnref(mColorFilter);
    setTransform(0);
    if (mLayer) {
        mCaches.resourceCache.decrementRefcount(mLayer);
    }
+1 −0
Original line number Diff line number Diff line
@@ -387,6 +387,7 @@ void CanvasContext::setup(int width, int height) {

void CanvasContext::processLayerUpdates(const Vector<DeferredLayerUpdater*>* layerUpdaters,
        bool* hasFunctors) {
    LOG_ALWAYS_FATAL_IF(!mCanvas, "Cannot process layer updates without a canvas!");
    mGlobalContext->makeCurrent(mEglSurface);
    for (size_t i = 0; i < layerUpdaters->size(); i++) {
        DeferredLayerUpdater* update = layerUpdaters->itemAt(i);
+6 −23
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ namespace android {
namespace uirenderer {
namespace renderthread {

DrawFrameTask::DrawFrameTask() : mContext(0), mTaskMode(MODE_INVALID), mRenderNode(0) {
DrawFrameTask::DrawFrameTask() : mContext(0), mRenderNode(0) {
}

DrawFrameTask::~DrawFrameTask() {
@@ -69,23 +69,14 @@ void DrawFrameTask::drawFrame(RenderThread* renderThread) {
    LOG_ALWAYS_FATAL_IF(!mRenderNode.get(), "Cannot drawFrame with no render node!");
    LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");

    postAndWait(renderThread, MODE_FULL);
    postAndWait(renderThread);

    // Reset the single-frame data
    mDirty.setEmpty();
    mRenderNode = 0;
}

void DrawFrameTask::flushStateChanges(RenderThread* renderThread) {
    LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");

    postAndWait(renderThread, MODE_STATE_ONLY);
}

void DrawFrameTask::postAndWait(RenderThread* renderThread, TaskMode mode) {
    LOG_ALWAYS_FATAL_IF(mode == MODE_INVALID, "That's not a real mode, silly!");

    mTaskMode = mode;
void DrawFrameTask::postAndWait(RenderThread* renderThread) {
    AutoMutex _lock(mLock);
    renderThread->queue(this);
    mSignal.wait(mLock);
@@ -97,11 +88,6 @@ void DrawFrameTask::run() {
    // canUnblockUiThread is temporary until WebView has a solution for syncing frame state
    bool canUnblockUiThread = syncFrameState();

    if (mTaskMode == MODE_STATE_ONLY) {
        unblockUiThread();
        return;
    }

    // Grab a copy of everything we need
    Rect dirtyCopy(mDirty);
    sp<RenderNode> renderNode = mRenderNode;
@@ -125,12 +111,9 @@ bool DrawFrameTask::syncFrameState() {
    bool hasFunctors = false;
    mContext->processLayerUpdates(&mLayers, &hasFunctors);

    // If we don't have an mRenderNode this is a state flush only
    if (mRenderNode.get()) {
    TreeInfo info = {0};
    mRenderNode->prepareTree(info);
    hasFunctors |= info.hasFunctors;
    }

    return !hasFunctors;
}
+1 −9
Original line number Diff line number Diff line
@@ -56,18 +56,11 @@ public:
    void setRenderNode(RenderNode* renderNode);
    void setDirty(int left, int top, int right, int bottom);
    void drawFrame(RenderThread* renderThread);
    void flushStateChanges(RenderThread* renderThread);

    virtual void run();

private:
    enum TaskMode {
        MODE_INVALID,
        MODE_FULL,
        MODE_STATE_ONLY,
    };

    void postAndWait(RenderThread* renderThread, TaskMode mode);
    void postAndWait(RenderThread* renderThread);
    bool syncFrameState();
    void unblockUiThread();
    static void drawRenderNode(CanvasContext* context, RenderNode* renderNode, Rect* dirty);
@@ -80,7 +73,6 @@ private:
    /*********************************************
     *  Single frame data
     *********************************************/
    TaskMode mTaskMode;
    sp<RenderNode> mRenderNode;
    Rect mDirty;

+0 −7
Original line number Diff line number Diff line
@@ -75,9 +75,6 @@ CREATE_BRIDGE1(destroyContext, CanvasContext* context) {

void RenderProxy::destroyContext() {
    if (mContext) {
        // Flush any pending changes to ensure all garbage is destroyed
        mDrawFrameTask.flushStateChanges(&mRenderThread);

        SETUP_TASK(destroyContext);
        args->context = mContext;
        mContext = 0;
@@ -149,10 +146,6 @@ CREATE_BRIDGE1(destroyCanvas, CanvasContext* context) {
}

void RenderProxy::destroyCanvas() {
    // If the canvas is being destroyed we won't be drawing again anytime soon
    // So flush any pending state changes to allow for resource cleanup.
    mDrawFrameTask.flushStateChanges(&mRenderThread);

    SETUP_TASK(destroyCanvas);
    args->context = mContext;
    post(task);