// Copyright 2016 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.

#ifndef CONTENT_PUBLIC_GPU_CONTENT_GPU_CLIENT_H_
#define CONTENT_PUBLIC_GPU_CONTENT_GPU_CLIENT_H_

#include <memory>
#include <string>

#include "base/metrics/field_trial.h"
#include "base/single_thread_task_runner.h"
#include "content/public/common/content_client.h"
#include "media/media_buildflags.h"
#include "services/service_manager/public/cpp/binder_registry.h"

namespace base {
class Token;
}

namespace gpu {
struct GpuPreferences;
class SharedImageManager;
class SyncPointManager;
}

namespace media {
class CdmProxy;
}

namespace content {

// Embedder API for participating in gpu logic.
class CONTENT_EXPORT ContentGpuClient {
 public:
  virtual ~ContentGpuClient() {}

  // Initializes the registry. |registry| will be passed to a ConnectionFilter
  // (which lives on the IO thread). Unlike other childthreads, the client must
  // register additional interfaces on this registry rather than just creating
  // more ConnectionFilters as the ConnectionFilter that wraps this registry
  // specifically does not bind any interface requests until after the Gpu
  // process receives CreateGpuService() from the browser.
  virtual void InitializeRegistry(service_manager::BinderRegistry* registry) {}

  // Called during initialization once the GpuService has been initialized.
  virtual void GpuServiceInitialized(
      const gpu::GpuPreferences& gpu_preferences) {}

  // Called right after the IO/compositor thread is created.
  virtual void PostIOThreadCreated(
      base::SingleThreadTaskRunner* io_task_runner) {}
  virtual void PostCompositorThreadCreated(
      base::SingleThreadTaskRunner* task_runner) {}

  // Allows client to supply SyncPointManager and SharedImageManager instance
  // instead of having content internally create one.
  virtual gpu::SyncPointManager* GetSyncPointManager();
  virtual gpu::SharedImageManager* GetSharedImageManager();

#if BUILDFLAG(ENABLE_LIBRARY_CDMS)
  // Creates a media::CdmProxy for the type of Content Decryption Module (CDM)
  // identified by |cdm_guid|.
  virtual std::unique_ptr<media::CdmProxy> CreateCdmProxy(
      const base::Token& cdm_guid);
#endif
};

}  // namespace content

#endif  // CONTENT_PUBLIC_GPU_CONTENT_GPU_CLIENT_H_
