// 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/raster/staging_buffer_pool.h"

#include "base/memory/memory_coordinator_client.h"
#include "base/memory/memory_coordinator_client_registry.h"
#include "base/run_loop.h"
#include "base/test/scoped_task_environment.h"
#include "base/threading/thread_task_runner_handle.h"
#include "components/viz/test/test_context_provider.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cc {

TEST(StagingBufferPoolTest, ShutdownImmediatelyAfterCreation) {
  auto context_provider = viz::TestContextProvider::CreateWorker();
  LayerTreeResourceProvider* resource_provider = nullptr;
  bool use_partial_raster = false;
  int max_staging_buffer_usage_in_bytes = 1024;
  auto task_runner = base::ThreadTaskRunnerHandle::Get();
  // Create a StagingBufferPool and immediately shut it down.
  auto pool = std::make_unique<StagingBufferPool>(
      task_runner.get(), context_provider.get(), resource_provider,
      use_partial_raster, max_staging_buffer_usage_in_bytes);
  pool->Shutdown();
  // Flush the message loop.
  auto flush_message_loop = [] {
    base::RunLoop runloop;
    base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
                                                  runloop.QuitClosure());
    runloop.Run();
  };

  // Constructing the pool does a post-task to add itself as an observer. So
  // allow for that registration to complete first.
  flush_message_loop();

  // Now, destroy the pool, and trigger a notification from the
  // MemoryCoordinatorClientRegistry.
  pool = nullptr;
  base::MemoryCoordinatorClientRegistry::GetInstance()->PurgeMemory();
  // Allow the callbacks in the observers to run.
  flush_message_loop();
  // No crash.
}

}  // namespace cc
