// Copyright 2020 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 "media/gpu/v4l2/buffer_affinity_tracker.h"
#include "base/synchronization/lock.h"
#include "media/gpu/macros.h"
#include "ui/gfx/generic_shared_memory_id.h"

namespace media {

BufferAffinityTracker::BufferAffinityTracker(size_t nb_buffers) {
  resize(0);
}

BufferAffinityTracker::~BufferAffinityTracker() = default;

void BufferAffinityTracker::resize(size_t nb_buffers) {
  base::AutoLock lock(lock_);

  id_to_buffer_map_.clear();
  nb_buffers_ = nb_buffers;
  DVLOGF(4) << this << " resize: " << nb_buffers;
}

absl::optional<size_t> BufferAffinityTracker::get_buffer_for_id(
    gfx::GenericSharedMemoryId id) {
  base::AutoLock lock(lock_);

  auto it = id_to_buffer_map_.find(id);
  // If the handle is already bound to a buffer, return it.
  if (it != id_to_buffer_map_.end()) {
    DVLOGF(4) << this << " match for " << it->second;
    return it->second;
  }

  // Try to assign a new buffer for this handle...

  // No buffer available? No luck then.
  if (id_to_buffer_map_.size() == nb_buffers()) {
    DVLOGF(4) << this << " tracker is full!";
    return absl::nullopt;
  }

  const size_t v4l2_id = id_to_buffer_map_.size();
  id_to_buffer_map_.emplace(id, v4l2_id);

  DVLOGF(4) << this << " add " << v4l2_id;
  return v4l2_id;
}

}  // namespace media
