// Copyright 2017 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 "cc/test/resource_provider_test_utils.h"

#include "base/bind.h"

namespace cc {

const std::unordered_map<viz::ResourceId, viz::ResourceId>&
SendResourceAndGetChildToParentMap(
    const std::vector<viz::ResourceId>& resource_ids,
    viz::DisplayResourceProvider* resource_provider,
    viz::ClientResourceProvider* child_resource_provider,
    viz::ContextProvider* child_context_provider) {
  DCHECK(resource_provider);
  DCHECK(child_resource_provider);
  // Transfer resources to the parent.
  std::vector<viz::TransferableResource> send_to_parent;
  int child_id = resource_provider->CreateChild(
      base::BindRepeating([](const std::vector<viz::ReturnedResource>&) {}),
      true);
  child_resource_provider->PrepareSendToParent(resource_ids, &send_to_parent,
                                               child_context_provider);
  resource_provider->ReceiveFromChild(child_id, send_to_parent);

  // Delete them in the child so they won't be leaked, and will be released once
  // returned from the parent. This assumes they won't need to be sent to the
  // parent again.
  for (viz::ResourceId id : resource_ids)
    child_resource_provider->RemoveImportedResource(id);

  // Return the child to parent map.
  return resource_provider->GetChildToParentMap(child_id);
}

}  // namespace cc
