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

Commit af0fa4fd authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Remove crash workarounds, add logging"

parents 4d5c4e21 9846de68
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -44,13 +44,14 @@ void DisplayList::outputLogBuffer(int fd) {
}

DisplayList::DisplayList(const DisplayListRenderer& recorder) :
    mTransformMatrix(NULL), mTransformCamera(NULL), mTransformMatrix3D(NULL),
    mDestroyed(false), mTransformMatrix(NULL), mTransformCamera(NULL), mTransformMatrix3D(NULL),
    mStaticMatrix(NULL), mAnimationMatrix(NULL) {

    initFromDisplayListRenderer(recorder);
}

DisplayList::~DisplayList() {
    mDestroyed = true;
    clearResources();
}

@@ -63,7 +64,6 @@ void DisplayList::destroyDisplayListDeferred(DisplayList* displayList) {

void DisplayList::clearResources() {
    mDisplayListData = NULL;
    mSize = 0; // TODO: shouldn't be needed, WAR possible use after delete

    mClipRectOp = NULL;
    mSaveLayerOp = NULL;
@@ -169,6 +169,10 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
    mSaveLayerOp = new (alloc) SaveLayerOp();
    mSaveOp = new (alloc) SaveOp();
    mRestoreToCountOp = new (alloc) RestoreToCountOp();
    if (CC_UNLIKELY(!mSaveOp)) { // temporary debug logging
        ALOGW("Error: %s's SaveOp not allocated, size %d", getName(), mSize);
        CRASH();
    }

    mFunctorCount = recorder.getFunctorCount();

@@ -480,7 +484,11 @@ void DisplayList::replay(ReplayStateStruct& replayStruct, const int level) {
 */
template <class T>
void DisplayList::iterate(OpenGLRenderer& renderer, T& handler, const int level) {
    if (mSize == 0 || mAlpha <= 0 || CC_UNLIKELY(!mSaveOp)) { // TODO: shouldn't need mSaveOp check
    if (CC_UNLIKELY(mDestroyed)) { // temporary debug logging
        ALOGW("Error: %s is drawing after destruction, size %d", getName(), mSize);
        CRASH();
    }
    if (mSize == 0 || mAlpha <= 0) {
        DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, mName.string());
        return;
    }
+5 −4
Original line number Diff line number Diff line
@@ -501,6 +501,7 @@ private:
    uint32_t mFunctorCount;

    String8 mName;
    bool mDestroyed; // used for debugging crash, TODO: remove once invalid state crash fixed

    // View properties
    bool mClipToBounds;
@@ -530,11 +531,11 @@ private:
     * an alpha causes a SaveLayerAlpha to occur). These operations point into mDisplayListData's
     * allocation, or null if uninitialized.
     *
     * These are initialized (via friend constructors) when a displayList is issued in either replay
     * or deferred mode. If replaying, the ops are not used until the next frame. If deferring, the
     * ops may be stored in the DeferredDisplayList to be played back a second time.
     * These are initialized (via friend re-constructors) when a displayList is issued in either
     * replay or deferred mode. If replaying, the ops are not used until the next frame. If
     * deferring, the ops may be stored in the DeferredDisplayList to be played back a second time.
     *
     * They should be used at most once per frame (one call to iterate)
     * They should be used at most once per frame (one call to 'iterate') to avoid overwriting data
     */
    ClipRectOp* mClipRectOp;
    SaveLayerOp* mSaveLayerOp;