// Copyright 2015 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/base/mime_sniffer.h"

#include <vector>

#include "base/bits.h"
#include "base/logging.h"
#include "base/timer/elapsed_timer.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace net {
namespace {

// This text is supposed to be representative of a plain text file the browser
// might encounter, including a variation in line lengths and blank
// lines. CRLF is used as the line-terminator to make it slightly more
// difficult. It is roughly 1KB.
const char kRepresentativePlainText[] =
    "The Tragedie of Hamlet\r\n"
    "\r\n"
    "Actus Primus. Scoena Prima.\r\n"
    "\r\n"
    "Enter Barnardo and Francisco two Centinels.\r\n"
    "\r\n"
    "  Barnardo. Who's there?\r\n"
    "  Fran. Nay answer me: Stand & vnfold\r\n"
    "your selfe\r\n"
    "\r\n"
    "   Bar. Long liue the King\r\n"
    "\r\n"
    "   Fran. Barnardo?\r\n"
    "  Bar. He\r\n"
    "\r\n"
    "   Fran. You come most carefully vpon your houre\r\n"
    "\r\n"
    "   Bar. 'Tis now strook twelue, get thee to bed Francisco\r\n"
    "\r\n"
    "   Fran. For this releefe much thankes: 'Tis bitter cold,\r\n"
    "And I am sicke at heart\r\n"
    "\r\n"
    "   Barn. Haue you had quiet Guard?\r\n"
    "  Fran. Not a Mouse stirring\r\n"
    "\r\n"
    "   Barn. Well, goodnight. If you do meet Horatio and\r\n"
    "Marcellus, the Riuals of my Watch, bid them make hast.\r\n"
    "Enter Horatio and Marcellus.\r\n"
    "\r\n"
    "  Fran. I thinke I heare them. Stand: who's there?\r\n"
    "  Hor. Friends to this ground\r\n"
    "\r\n"
    "   Mar. And Leige-men to the Dane\r\n"
    "\r\n"
    "   Fran. Giue you good night\r\n"
    "\r\n"
    "   Mar. O farwel honest Soldier, who hath relieu'd you?\r\n"
    "  Fra. Barnardo ha's my place: giue you goodnight.\r\n"
    "\r\n"
    "Exit Fran.\r\n"
    "\r\n"
    "  Mar. Holla Barnardo\r\n"
    "\r\n"
    "   Bar. Say, what is Horatio there?\r\n"
    "  Hor. A peece of him\r\n"
    "\r\n"
    "   Bar. Welcome Horatio, welcome good Marcellus\r\n"
    "\r\n";

void RunLooksLikeBinary(const std::string& plaintext, size_t iterations) {
  bool looks_like_binary = false;
  for (size_t i = 0; i < iterations; ++i) {
    if (LooksLikeBinary(&plaintext[0], plaintext.size()))
      looks_like_binary = true;
  }
  CHECK(!looks_like_binary);
}

TEST(MimeSnifferTest, PlainTextPerfTest) {
  // Android systems have a relatively small CPU cache (512KB to 2MB).
  // It is better if the test data fits in cache so that we are not just
  // testing bus bandwidth.
  const size_t kTargetSize = 1 << 18;  // 256KB
  const size_t kWarmupIterations = 16;
  const size_t kMeasuredIterations = 1 << 15;
  std::string plaintext = kRepresentativePlainText;
  // The purpose of the static_cast<size_t>() here is to prevent MSVC from
  // complaining about an implicit promotion to 64 bits when compiling 64-bit.
  size_t expected_size =
      plaintext.size() *
      static_cast<size_t>(
          1u << base::bits::Log2Ceiling(kTargetSize / plaintext.size()));
  plaintext.reserve(expected_size);
  while (plaintext.size() < kTargetSize)
    plaintext += plaintext;
  DCHECK_EQ(expected_size, plaintext.size());
  RunLooksLikeBinary(plaintext, kWarmupIterations);
  base::ElapsedTimer elapsed_timer;
  RunLooksLikeBinary(plaintext, kMeasuredIterations);
  LOG(INFO) << (elapsed_timer.Elapsed().InMicroseconds() * 1000 * 1024 /
                (static_cast<int64_t>(plaintext.size()) * kMeasuredIterations))
            << "ns per KB";
}

}  // namespace net
}  // namespace
