// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "config.h"

#if USE(ACCELERATED_COMPOSITING)

#include "CCTextureUpdateQueue.h"

namespace cc {

CCTextureUpdateQueue::CCTextureUpdateQueue()
{
}

CCTextureUpdateQueue::~CCTextureUpdateQueue()
{
}

void CCTextureUpdateQueue::appendFullUpload(TextureUploader::Parameters upload)
{
    m_fullEntries.append(upload);
}

void CCTextureUpdateQueue::appendPartialUpload(TextureUploader::Parameters upload)
{
    m_partialEntries.append(upload);
}

void CCTextureUpdateQueue::appendCopy(TextureCopier::Parameters copy)
{
    m_copyEntries.append(copy);
}

void CCTextureUpdateQueue::clearUploadsToEvictedResources()
{
    clearUploadsToEvictedResources(m_fullEntries);
    clearUploadsToEvictedResources(m_partialEntries);
}

void CCTextureUpdateQueue::clearUploadsToEvictedResources(Deque<TextureUploader::Parameters>& entryQueue)
{
    Deque<TextureUploader::Parameters> temp;
    entryQueue.swap(temp);
    while (temp.size()) {
        TextureUploader::Parameters upload = temp.takeFirst();
        if (!upload.texture->backingResourceWasEvicted())
            entryQueue.append(upload);
    }
}

TextureUploader::Parameters CCTextureUpdateQueue::takeFirstFullUpload()
{
    return m_fullEntries.takeFirst();
}

TextureUploader::Parameters CCTextureUpdateQueue::takeFirstPartialUpload()
{
    return m_partialEntries.takeFirst();
}

TextureCopier::Parameters CCTextureUpdateQueue::takeFirstCopy()
{
    return m_copyEntries.takeFirst();
}

bool CCTextureUpdateQueue::hasMoreUpdates() const
{
    return m_fullEntries.size() || m_partialEntries.size() || m_copyEntries.size();
}

}

#endif // USE(ACCELERATED_COMPOSITING)