// Copyright 2014 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 "net/third_party/quiche/src/quic/core/quic_write_blocked_list.h"

#include "net/third_party/quiche/src/quic/platform/api/quic_flag_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"

namespace quic {

QuicWriteBlockedList::QuicWriteBlockedList(QuicTransportVersion version)
    : priority_write_scheduler_(
          std::make_unique<spdy::PriorityWriteScheduler<QuicStreamId>>(
              QuicVersionUsesCryptoFrames(version)
                  ? std::numeric_limits<QuicStreamId>::max()
                  : 0)),
      last_priority_popped_(0),
      scheduler_type_(spdy::WriteSchedulerType::SPDY) {
  memset(batch_write_stream_id_, 0, sizeof(batch_write_stream_id_));
  memset(bytes_left_for_batch_write_, 0, sizeof(bytes_left_for_batch_write_));
}

QuicWriteBlockedList::~QuicWriteBlockedList() {}

bool QuicWriteBlockedList::ShouldYield(QuicStreamId id) const {
  for (const auto& stream : static_stream_collection_) {
    if (stream.id == id) {
      // Static streams should never yield to data streams, or to lower
      // priority static stream.
      return false;
    }
    if (stream.is_blocked) {
      return true;  // All data streams yield to static streams.
    }
  }

  return priority_write_scheduler_->ShouldYield(id);
}

bool QuicWriteBlockedList::SwitchWriteScheduler(spdy::WriteSchedulerType type,
                                                QuicTransportVersion version) {
  if (scheduler_type_ == type) {
    return true;
  }
  if (priority_write_scheduler_->NumRegisteredStreams() != 0) {
    QUIC_BUG << "Cannot switch scheduler with registered streams";
    return false;
  }
  QUIC_DVLOG(1) << "Switching to scheduler type: "
                << spdy::WriteSchedulerTypeToString(type);
  switch (type) {
    case spdy::WriteSchedulerType::LIFO:
      priority_write_scheduler_ =
          std::make_unique<spdy::LifoWriteScheduler<QuicStreamId>>();
      break;
    case spdy::WriteSchedulerType::SPDY:
      priority_write_scheduler_ =
          std::make_unique<spdy::PriorityWriteScheduler<QuicStreamId>>(
              QuicVersionUsesCryptoFrames(version)
                  ? std::numeric_limits<QuicStreamId>::max()
                  : 0);
      break;
    case spdy::WriteSchedulerType::HTTP2:
      priority_write_scheduler_ =
          std::make_unique<spdy::Http2PriorityWriteScheduler<QuicStreamId>>();
      break;
    case spdy::WriteSchedulerType::FIFO:
      priority_write_scheduler_ =
          std::make_unique<spdy::FifoWriteScheduler<QuicStreamId>>();
      break;
    default:
      QUIC_BUG << "Scheduler is not supported for type: "
               << spdy::WriteSchedulerTypeToString(type);
      return false;
  }
  scheduler_type_ = type;
  return true;
}

QuicStreamId QuicWriteBlockedList::PopFront() {
  QuicStreamId static_stream_id;
  if (static_stream_collection_.UnblockFirstBlocked(&static_stream_id)) {
    return static_stream_id;
  }

  const auto id_and_precedence =
      priority_write_scheduler_->PopNextReadyStreamAndPrecedence();
  const QuicStreamId id = std::get<0>(id_and_precedence);
  if (scheduler_type_ != spdy::WriteSchedulerType::SPDY) {
    // No batch writing logic for non-SPDY priority write scheduler.
    return id;
  }
  const spdy::SpdyPriority priority =
      std::get<1>(id_and_precedence).spdy3_priority();

  if (!priority_write_scheduler_->HasReadyStreams()) {
    // If no streams are blocked, don't bother latching.  This stream will be
    // the first popped for its priority anyway.
    batch_write_stream_id_[priority] = 0;
    last_priority_popped_ = priority;
  } else if (batch_write_stream_id_[priority] != id) {
    // If newly latching this batch write stream, let it write 16k.
    batch_write_stream_id_[priority] = id;
    bytes_left_for_batch_write_[priority] = 16000;
    last_priority_popped_ = priority;
  }

  return id;
}

void QuicWriteBlockedList::RegisterStream(
    QuicStreamId stream_id,
    bool is_static_stream,
    const spdy::SpdyStreamPrecedence& precedence) {
  DCHECK(!priority_write_scheduler_->StreamRegistered(stream_id))
      << "stream " << stream_id << " already registered";
  DCHECK(PrecedenceMatchesSchedulerType(precedence));
  if (is_static_stream) {
    static_stream_collection_.Register(stream_id);
    return;
  }

  priority_write_scheduler_->RegisterStream(stream_id, precedence);
}

void QuicWriteBlockedList::UnregisterStream(QuicStreamId stream_id,
                                            bool is_static) {
  if (is_static) {
    static_stream_collection_.Unregister(stream_id);
    return;
  }
  priority_write_scheduler_->UnregisterStream(stream_id);
}

void QuicWriteBlockedList::UpdateStreamPriority(
    QuicStreamId stream_id,
    const spdy::SpdyStreamPrecedence& new_precedence) {
  DCHECK(!static_stream_collection_.IsRegistered(stream_id));
  DCHECK(PrecedenceMatchesSchedulerType(new_precedence));
  priority_write_scheduler_->UpdateStreamPrecedence(stream_id, new_precedence);
}

void QuicWriteBlockedList::UpdateBytesForStream(QuicStreamId stream_id,
                                                size_t bytes) {
  if (scheduler_type_ != spdy::WriteSchedulerType::SPDY) {
    return;
  }
  if (batch_write_stream_id_[last_priority_popped_] == stream_id) {
    // If this was the last data stream popped by PopFront, update the
    // bytes remaining in its batch write.
    bytes_left_for_batch_write_[last_priority_popped_] -=
        static_cast<int32_t>(bytes);
  }
}

void QuicWriteBlockedList::AddStream(QuicStreamId stream_id) {
  if (static_stream_collection_.SetBlocked(stream_id)) {
    return;
  }

  bool push_front =
      scheduler_type_ == spdy::WriteSchedulerType::SPDY &&
      stream_id == batch_write_stream_id_[last_priority_popped_] &&
      bytes_left_for_batch_write_[last_priority_popped_] > 0;
  priority_write_scheduler_->MarkStreamReady(stream_id, push_front);
}

bool QuicWriteBlockedList::IsStreamBlocked(QuicStreamId stream_id) const {
  for (const auto& stream : static_stream_collection_) {
    if (stream.id == stream_id) {
      return stream.is_blocked;
    }
  }

  return priority_write_scheduler_->IsStreamReady(stream_id);
}

bool QuicWriteBlockedList::PrecedenceMatchesSchedulerType(
    const spdy::SpdyStreamPrecedence& precedence) {
  switch (scheduler_type_) {
    case spdy::WriteSchedulerType::LIFO:
      break;
    case spdy::WriteSchedulerType::SPDY:
      return precedence.is_spdy3_priority();
    case spdy::WriteSchedulerType::HTTP2:
      return !precedence.is_spdy3_priority();
    case spdy::WriteSchedulerType::FIFO:
      break;
    default:
      DCHECK(false);
      return false;
  }
  return true;
}

void QuicWriteBlockedList::StaticStreamCollection::Register(QuicStreamId id) {
  DCHECK(!IsRegistered(id));
  streams_.push_back({id, false});
}

bool QuicWriteBlockedList::StaticStreamCollection::IsRegistered(
    QuicStreamId id) const {
  for (const auto& stream : streams_) {
    if (stream.id == id) {
      return true;
    }
  }
  return false;
}

void QuicWriteBlockedList::StaticStreamCollection::Unregister(QuicStreamId id) {
  for (auto it = streams_.begin(); it != streams_.end(); ++it) {
    if (it->id == id) {
      if (it->is_blocked) {
        --num_blocked_;
      }
      streams_.erase(it);
      return;
    }
  }
  DCHECK(false) << "Erasing a non-exist stream with id " << id;
}

bool QuicWriteBlockedList::StaticStreamCollection::SetBlocked(QuicStreamId id) {
  for (auto& stream : streams_) {
    if (stream.id == id) {
      if (!stream.is_blocked) {
        stream.is_blocked = true;
        ++num_blocked_;
      }
      return true;
    }
  }
  return false;
}

bool QuicWriteBlockedList::StaticStreamCollection::UnblockFirstBlocked(
    QuicStreamId* id) {
  for (auto& stream : streams_) {
    if (stream.is_blocked) {
      --num_blocked_;
      stream.is_blocked = false;
      *id = stream.id;
      return true;
    }
  }
  return false;
}

}  // namespace quic
