// Copyright 2017 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 NET_NQE_EVENT_CREATOR_H_
#define NET_NQE_EVENT_CREATOR_H_

#include "base/macros.h"
#include "base/threading/thread_checker.h"
#include "base/time/time.h"
#include "net/base/net_export.h"
#include "net/log/net_log_with_source.h"
#include "net/nqe/effective_connection_type.h"
#include "net/nqe/network_quality.h"
#include "starboard/types.h"

namespace net {

class NetLogWithSource;

namespace nqe {

namespace internal {

// Class that adds net log events for network quality estimator.
class NET_EXPORT_PRIVATE EventCreator {
 public:
  explicit EventCreator(NetLogWithSource net_log);
  ~EventCreator();

  // May add network quality changed event to the net-internals log if there
  // is a change in the effective connection type, or if there is a meaningful
  // change in the values of HTTP RTT, transport RTT or bandwidth.
  // |effective_connection_type| is the current effective connection type.
  // |network_quality| is the current network quality.
  void MaybeAddNetworkQualityChangedEventToNetLog(
      EffectiveConnectionType effective_connection_type,
      const NetworkQuality& network_quality);

 private:
  NetLogWithSource net_log_;

  // The effective connection type when the net log event was last added.
  EffectiveConnectionType past_effective_connection_type_;

  //  The network quality when the net log event was last added.
  NetworkQuality past_network_quality_;

  THREAD_CHECKER(thread_checker_);

  DISALLOW_COPY_AND_ASSIGN(EventCreator);
};

}  // namespace internal

}  // namespace nqe

}  // namespace net

#endif  // NET_NQE_EVENT_CREATOR_H_
