// Copyright 2018 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 COMPONENTS_VIZ_HOST_GPU_CLIENT_DELEGATE_H_
#define COMPONENTS_VIZ_HOST_GPU_CLIENT_DELEGATE_H_

#include "base/callback_forward.h"
#include "mojo/public/cpp/system/message_pipe.h"

namespace viz {

class GpuHostImpl;
class HostGpuMemoryBufferManager;

// Delegate interface that GpuClient uses to get the current GpuHost and/or
// GpuMemoryBufferManager instances. These functions are guaranteed to be called
// on the thread corresponding to GpuClient's task runner.
class GpuClientDelegate {
 public:
  virtual ~GpuClientDelegate() {}

  // Returns the current instance of GpuHostImpl. If GPU service is not running,
  // tries to launch it. If the launch is unsuccessful, returns nullptr.
  virtual GpuHostImpl* EnsureGpuHost() = 0;

  // Returns the current HostGpuMemoryBufferManager instance.
  virtual HostGpuMemoryBufferManager* GetGpuMemoryBufferManager() = 0;
};

}  // namespace viz

#endif  // COMPONENTS_VIZ_HOST_GPU_CLIENT_DELEGATE_H_
