12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_update_queue.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/prioritized_resource.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ResourceUpdateQueue::ResourceUpdateQueue() {}
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ResourceUpdateQueue::~ResourceUpdateQueue() {}
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ResourceUpdateQueue::AppendFullUpload(const ResourceUpdate& upload) {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  full_entries_.push_back(upload);
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ResourceUpdateQueue::AppendPartialUpload(const ResourceUpdate& upload) {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  partial_entries_.push_back(upload);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ResourceUpdateQueue::ClearUploadsToEvictedResources() {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ClearUploadsToEvictedResources(&full_entries_);
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ClearUploadsToEvictedResources(&partial_entries_);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ResourceUpdateQueue::ClearUploadsToEvictedResources(
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::deque<ResourceUpdate>* entry_queue) {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::deque<ResourceUpdate> temp;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  entry_queue->swap(temp);
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  while (temp.size()) {
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ResourceUpdate upload = temp.front();
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    temp.pop_front();
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (!upload.texture->BackingResourceWasEvicted())
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      entry_queue->push_back(upload);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ResourceUpdate ResourceUpdateQueue::TakeFirstFullUpload() {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResourceUpdate first = full_entries_.front();
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  full_entries_.pop_front();
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return first;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ResourceUpdate ResourceUpdateQueue::TakeFirstPartialUpload() {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResourceUpdate first = partial_entries_.front();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  partial_entries_.pop_front();
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return first;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ResourceUpdateQueue::HasMoreUpdates() const {
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return !full_entries_.empty() || !partial_entries_.empty();
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
57