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

#include "virtual_file_provider/operation_throttle.h"

#include <base/bind.h>

namespace virtual_file_provider {

OperationThrottle::OperationThrottle(int max_operation_count)
    : max_operation_count_(max_operation_count),
      operation_count_changed_condition_(&lock_) {}

OperationThrottle::~OperationThrottle() {
  DCHECK_EQ(0, operation_count_);
}

std::unique_ptr<base::ScopedClosureRunner> OperationThrottle::StartOperation() {
  base::AutoLock lock(lock_);
  while (operation_count_ >= max_operation_count_) {
    operation_count_changed_condition_.Wait();
  }
  ++operation_count_;
  return std::make_unique<base::ScopedClosureRunner>(
      base::Bind(&OperationThrottle::FinishOperation, base::Unretained(this)));
}

void OperationThrottle::FinishOperation() {
  base::AutoLock lock(lock_);
  --operation_count_;
  operation_count_changed_condition_.Signal();
}

}  // namespace virtual_file_provider
