/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_HWUI_LAYER_UPDATE_QUEUE_H
#define ANDROID_HWUI_LAYER_UPDATE_QUEUE_H

#include "Rect.h"
#include "utils/Macros.h"

#include <vector>
#include <unordered_map>

namespace android {
namespace uirenderer {

class RenderNode;

class LayerUpdateQueue {
    PREVENT_COPY_AND_ASSIGN(LayerUpdateQueue);
public:
    struct Entry {
        Entry(RenderNode* renderNode, const Rect& damage)
                : renderNode(renderNode)
                , damage(damage) {}
        RenderNode* renderNode;
        Rect damage;
    };

    LayerUpdateQueue() {}
    void enqueueLayerWithDamage(RenderNode* renderNode, Rect dirty);
    void clear();
    const std::vector<Entry> entries() const { return mEntries; }
private:
    std::vector<Entry> mEntries;
};

}; // namespace uirenderer
}; // namespace android

#endif // ANDROID_HWUI_LAYER_UPDATE_QUEUE_H
