/*
 * Copyright 2017 The Cobalt Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "cobalt/browser/memory_settings/auto_mem_settings.h"

#include <algorithm>
#include <sstream>
#include <string>
#include <vector>

#include "base/memory/scoped_ptr.h"
#include "cobalt/browser/memory_settings/test_common.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace browser {
namespace memory_settings {
namespace {
CommandLine MakeCommandLine(const std::string& name, const std::string& value) {
  CommandLine command_line(CommandLine::NO_PROGRAM);
  command_line.AppendSwitchASCII(name, value);
  return command_line;
}

void TestParseInt(const base::optional<int64_t>& expected,
                  const std::string& value, const std::string& name,
                  base::optional<int64_t>* setting) {
#define TEST_EXTRAS                            \
  "expected=" << expected << ", "              \
              << "name=\"" << name << "\", "   \
              << "value=\"" << value << "\", " \
              << "setting=" << *setting

  if (!expected) {
    EXPECT_FALSE(*setting) << TEST_EXTRAS;
    return;
  }

  EXPECT_TRUE(*setting) << TEST_EXTRAS;
  if (!*setting) {
    // Check and quit so we can continue on failure without a crash.
    return;
  }
  EXPECT_EQ(expected, **setting) << TEST_EXTRAS;
#undef TEST_EXTRAS
}

void TestAllParseInt(const base::optional<int64_t>& expected,
                     const std::string& value) {
#define TEST_PARSE_INT(expected, value, switch_name, field_name)      \
  {                                                                   \
    AutoMemSettings settings =                                        \
        GetSettings(MakeCommandLine(switch_name, value));             \
    TestParseInt(expected, value, switch_name, &settings.field_name); \
  }

  TEST_PARSE_INT(expected, value, switches::kImageCacheSizeInBytes,
                 cobalt_image_cache_size_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kJavaScriptGcThresholdInBytes,
                 javascript_garbage_collection_threshold_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kRemoteTypefaceCacheSizeInBytes,
                 remote_typeface_cache_capacity_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kSkiaCacheSizeInBytes,
                 skia_cache_size_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kSoftwareSurfaceCacheSizeInBytes,
                 software_surface_cache_size_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kOffscreenTargetCacheSizeInBytes,
                 offscreen_target_cache_size_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kMaxCobaltCpuUsage,
                 max_cpu_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kMaxCobaltGpuUsage,
                 max_gpu_in_bytes);
  TEST_PARSE_INT(expected, value, switches::kReduceCpuMemoryBy,
                 reduce_cpu_memory_by);
  TEST_PARSE_INT(expected, value, switches::kReduceGpuMemoryBy,
                 reduce_gpu_memory_by);
#undef TEST_PARSE_INT
}

void TestParseDimensions(const base::optional<TextureDimensions>& expected,
                         const std::string& value) {
  CommandLine command_line(CommandLine::NO_PROGRAM);
  command_line.AppendSwitchASCII(switches::kSkiaTextureAtlasDimensions, value);
  AutoMemSettings settings = GetSettings(command_line);
  if (!expected) {
    EXPECT_FALSE(settings.skia_texture_atlas_dimensions);
    return;
  }
  EXPECT_TRUE(settings.skia_texture_atlas_dimensions)
      << " value=\"" << value << "\", expected=" << expected;
  if (!settings.skia_texture_atlas_dimensions) {
    return;
  }
  EXPECT_EQ(expected->width(), settings.skia_texture_atlas_dimensions->width())
      << " value=\"" << value << "\", expected=" << expected;
  EXPECT_EQ(expected->height(),
            settings.skia_texture_atlas_dimensions->height())
      << " value=\"" << value << "\", expected=" << expected;
  EXPECT_EQ(expected->bytes_per_pixel(),
            settings.skia_texture_atlas_dimensions->bytes_per_pixel())
      << " value=\"" << value << "\", expected=" << expected;
}
}  // namespace

TEST(AutoMemSettingsTest, InitialState) {
  AutoMemSettings settings(AutoMemSettings::kTypeCommandLine);
  EXPECT_EQ(AutoMemSettings::kTypeCommandLine, settings.type);
  EXPECT_FALSE(settings.cobalt_image_cache_size_in_bytes);
  EXPECT_FALSE(settings.javascript_garbage_collection_threshold_in_bytes);
  EXPECT_FALSE(settings.remote_typeface_cache_capacity_in_bytes);
  EXPECT_FALSE(settings.skia_cache_size_in_bytes);
  EXPECT_FALSE(settings.skia_texture_atlas_dimensions);
  EXPECT_FALSE(settings.software_surface_cache_size_in_bytes);
  EXPECT_FALSE(settings.offscreen_target_cache_size_in_bytes);
  EXPECT_FALSE(settings.max_cpu_in_bytes);
  EXPECT_FALSE(settings.max_gpu_in_bytes);
  EXPECT_FALSE(settings.reduce_cpu_memory_by);
  EXPECT_FALSE(settings.reduce_gpu_memory_by);

  AutoMemSettings build_settings(AutoMemSettings::kTypeBuild);
  EXPECT_EQ(AutoMemSettings::kTypeBuild, build_settings.type);
  EXPECT_TRUE(build_settings.max_cpu_in_bytes);
  EXPECT_EQ(0, *build_settings.max_cpu_in_bytes);
}

// Tests the expectation that numerous string variations (whole numbers vs
// fractions vs units) parse correctly.
TEST(AutoMemSettingsTest, ParseIntegers) {
  // Autoset
  TestAllParseInt(-1, "-1");
  TestAllParseInt(-1, "auto");
  TestAllParseInt(-1, "Auto");
  TestAllParseInt(-1, "AUTO");
  TestAllParseInt(-1, "autoset");
  TestAllParseInt(-1, "AutoSet");
  TestAllParseInt(-1, "AUTOSET");

  // Bytes.
  TestAllParseInt(1, "1");
  TestAllParseInt(1, "1B");
  TestAllParseInt(1, "1b");
  TestAllParseInt(1, "1B");
  TestAllParseInt(1, "1b");

  // Kilobytes and fractional amounts.
  TestAllParseInt(1024, "1KB");
  TestAllParseInt(1024, "1Kb");
  TestAllParseInt(1024, "1kB");
  TestAllParseInt(1024, "1kb");

  TestAllParseInt(512, ".5kb");
  TestAllParseInt(512, "0.5kb");
  TestAllParseInt(1536, "1.5kb");
  TestAllParseInt(1536, "1.50kb");

  // Megabytes and fractional amounts.
  TestAllParseInt(1024 * 1024, "1MB");
  TestAllParseInt(1024 * 1024, "1Mb");
  TestAllParseInt(1024 * 1024, "1mB");
  TestAllParseInt(1024 * 1024, "1mb");

  TestAllParseInt(512 * 1024, ".5mb");
  TestAllParseInt(512 * 1024, "0.5mb");
  TestAllParseInt(1536 * 1024, "1.5mb");
  TestAllParseInt(1536 * 1024, "1.50mb");

  // Gigabytes and fractional amounts.
  TestAllParseInt(1024 * 1024 * 1024, "1GB");
  TestAllParseInt(1024 * 1024 * 1024, "1Gb");
  TestAllParseInt(1024 * 1024 * 1024, "1gB");
  TestAllParseInt(1024 * 1024 * 1024, "1gb");

  TestAllParseInt(512 * 1024 * 1024, ".5gb");
  TestAllParseInt(1536 * 1024 * 1024, "1.50gb");
}

TEST(AutoMemSettingsTest, ParseDimensionsLower) {
  TestParseDimensions(TextureDimensions(1234, 5678, 2), "1234x5678");
}

TEST(AutoMemSettingsTest, ParseDimensionsOne) {
  TestParseDimensions(base::nullopt, "1234");
}

TEST(AutoMemSettingsTest, ParseDimensionsOneX) {
  TestParseDimensions(base::nullopt, "1234x");
}

TEST(AutoMemSettingsTest, ParseDimensionsTwoX) {
  TestParseDimensions(base::nullopt, "1234x5678x");
}

TEST(AutoMemSettingsTest, ParseDimensionsBadNum1) {
  TestParseDimensions(base::nullopt, "ABCDx1234");
}

TEST(AutoMemSettingsTest, ParseDimensionsBadNum2) {
  TestParseDimensions(base::nullopt, "1234xABCD");
}

TEST(AutoMemSettingsTest, ParseDimensionsUpper) {
  TestParseDimensions(TextureDimensions(1234, 5678, 2), "1234X5678");
}

TEST(AutoMemSettingsTest, ParseDimensionsBpp) {
  TestParseDimensions(TextureDimensions(1234, 5678, 12), "1234X5678X12");
  TestParseDimensions(TextureDimensions(1234, 5678, 1), "1234X5678x1");
  TestParseDimensions(TextureDimensions(1234, 5678, 2), "1234x5678x2");
  TestParseDimensions(TextureDimensions(1234, 5678, 3), "1234x5678X3");
}

TEST(AutoMemSettingsTest, ParseDimensionsAuto) {
  TestParseDimensions(TextureDimensions(-1, -1, -1), "-1");
  TestParseDimensions(TextureDimensions(-1, -1, -1), "auto");
  TestParseDimensions(TextureDimensions(-1, -1, -1), "Auto");
  TestParseDimensions(TextureDimensions(-1, -1, -1), "AUTO");
  TestParseDimensions(TextureDimensions(-1, -1, -1), "autoset");
  TestParseDimensions(TextureDimensions(-1, -1, -1), "AutoSet");
  TestParseDimensions(TextureDimensions(-1, -1, -1), "AUTOSET");
}

}  // namespace memory_settings
}  // namespace browser
}  // namespace cobalt
