// Copyright 2017 The Chromium OS 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 VIRTUAL_FILE_PROVIDER_OPERATION_THROTTLE_H_
#define VIRTUAL_FILE_PROVIDER_OPERATION_THROTTLE_H_

#include <memory>

#include <base/callback_helpers.h>
#include <base/synchronization/condition_variable.h>
#include <base/synchronization/lock.h>

namespace virtual_file_provider {

// OperationThrottle limits the number of operations running at the same time,
// by blocking new operations until existing one finishes.
class OperationThrottle {
 public:
  explicit OperationThrottle(int max_operation_count);
  ~OperationThrottle();

  // Increments the operation counter, possibly after blocking the caller until
  // other operations finish.
  // The caller should keep the returned object alive until the operation
  // finishes.
  std::unique_ptr<base::ScopedClosureRunner> StartOperation();

 private:
  void FinishOperation();

  const int max_operation_count_;
  int operation_count_ = 0;
  base::Lock lock_;
  base::ConditionVariable operation_count_changed_condition_;

  DISALLOW_COPY_AND_ASSIGN(OperationThrottle);
};

}  // namespace virtual_file_provider

#endif  // VIRTUAL_FILE_PROVIDER_OPERATION_THROTTLE_H_
