/*
 * 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/pretty_print.h"

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

#include "base/command_line.h"
#include "base/logging.h"
#include "cobalt/browser/memory_settings/memory_settings.h"
#include "cobalt/browser/memory_settings/test_common.h"
#include "cobalt/browser/switches.h"
#include "starboard/log.h"
#include "starboard/memory.h"
#include "starboard/system.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace browser {
namespace memory_settings {

TEST(MemorySettingsPrettyPrint, GeneratePrettyPrintTable) {
  TestSettingGroup setting_group;
  setting_group.LoadDefault();
  std::string actual_string =
      GeneratePrettyPrintTable(false, setting_group.AsConstVector());

  const char* expected_string =
      " SETTING NAME                           VALUE                   TYPE   SOURCE    \n"
      " _______________________________________________________________________________ \n"
      "|                                      |             |         |      |         |\n"
      "| image_cache_size_in_bytes            |        1234 |  0.0 MB |  GPU | CmdLine |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| javascript_gc_threshold_in_bytes     |        1112 |  0.0 MB |  CPU | AutoSet |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| skia_atlas_texture_dimensions        | 1234x4567x2 | 10.7 MB |  GPU | CmdLine |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| skia_cache_size_in_bytes             |    12345678 | 11.8 MB |  GPU | CmdLine |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| software_surface_cache_size_in_bytes |         N/A |     N/A |  N/A |     N/A |\n"
      "|______________________________________|_____________|_________|______|_________|\n";

  EXPECT_STREQ(expected_string, actual_string.c_str());
}

TEST(MemorySettingsPrettyPrint, GenerateMemoryTableWithUnsetGpuMemory) {
  IntSetting cpu_memory_setting("max_cpu_memory");
  cpu_memory_setting.set_value(MemorySetting::kBuildSetting, 256 * 1024 * 1024);
  IntSetting gpu_memory_setting("max_gpu_memory");

  std::string actual_output =
      GenerateMemoryTable(false,               // No color.
                          cpu_memory_setting,  // 256 MB CPU available
                          gpu_memory_setting,
                          128 * 1024 * 1024,  // 128 MB CPU consumption
                          0);                 // 0 MB GPU consumption.

  const char* expected_output =
      " MEMORY           SOURCE   TOTAL       SETTINGS CONSUME   \n"
      " ________________________________________________________ \n"
      "|                |        |           |                  |\n"
      "| max_cpu_memory |  Build |  256.0 MB |         128.0 MB |\n"
      "|________________|________|___________|__________________|\n"
      "|                |        |           |                  |\n"
      "| max_gpu_memory |  Unset | <UNKNOWN> |           0.0 MB |\n"
      "|________________|________|___________|__________________|\n";

  EXPECT_STREQ(expected_output, actual_output.c_str()) << actual_output;
}

TEST(MemorySettingsPrettyPrint, GenerateMemoryTableWithGpuMemory) {
  IntSetting cpu_memory_setting("max_cpu_memory");
  cpu_memory_setting.set_value(MemorySetting::kBuildSetting, 256 * 1024 * 1024);
  IntSetting gpu_memory_setting("max_gpu_memory");
  gpu_memory_setting.set_value(MemorySetting::kBuildSetting, 64 * 1024 * 1024);

  std::string actual_output =
      GenerateMemoryTable(false,               // No color.
                          cpu_memory_setting,  // 256 MB CPU available.
                          gpu_memory_setting,  // 64 MB GPU available.
                          128 * 1024 * 1024,   // 128 MB CPU consumption.
                          23592960);           // 22.5 MB GPU consumption.

  const char* expected_output =
      " MEMORY           SOURCE   TOTAL      SETTINGS CONSUME   \n"
      " _______________________________________________________ \n"
      "|                |        |          |                  |\n"
      "| max_cpu_memory |  Build | 256.0 MB |         128.0 MB |\n"
      "|________________|________|__________|__________________|\n"
      "|                |        |          |                  |\n"
      "| max_gpu_memory |  Build |  64.0 MB |          22.5 MB |\n"
      "|________________|________|__________|__________________|\n";

  EXPECT_STREQ(expected_output, actual_output.c_str()) << actual_output;
}

TEST(MemorySettingsPrettyPrint, ToString) {
  TestSettingGroup test_setting_group;
  test_setting_group.LoadDefault();

  std::string actual_string =
      GeneratePrettyPrintTable(false,  // No color.
                               test_setting_group.AsConstVector());

  const char* expected_string =
      " SETTING NAME                           VALUE                   TYPE   SOURCE    \n"
      " _______________________________________________________________________________ \n"
      "|                                      |             |         |      |         |\n"
      "| image_cache_size_in_bytes            |        1234 |  0.0 MB |  GPU | CmdLine |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| javascript_gc_threshold_in_bytes     |        1112 |  0.0 MB |  CPU | AutoSet |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| skia_atlas_texture_dimensions        | 1234x4567x2 | 10.7 MB |  GPU | CmdLine |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| skia_cache_size_in_bytes             |    12345678 | 11.8 MB |  GPU | CmdLine |\n"
      "|______________________________________|_____________|_________|______|_________|\n"
      "|                                      |             |         |      |         |\n"
      "| software_surface_cache_size_in_bytes |         N/A |     N/A |  N/A |     N/A |\n"
      "|______________________________________|_____________|_________|______|_________|\n";

  EXPECT_STREQ(expected_string, actual_string.c_str()) << actual_string;
}

TEST(MemorySettingsPrettyPrint, GenerateMemoryWithInvalidGpuMemoryConsumption) {
  IntSetting cpu_memory_setting("max_cpu_memory");
  cpu_memory_setting.set_value(MemorySetting::kBuildSetting, 256 * 1024 * 1024);
  IntSetting gpu_memory_setting("max_gpu_memory");
  gpu_memory_setting.set_value(MemorySetting::kStarboardAPI, 0);

  std::string actual_output = GenerateMemoryTable(
      false,               // No color.
      cpu_memory_setting,  // 256 MB CPU available.
      gpu_memory_setting,  // Signals that no gpu memory is available
                           //   on this system.
      128 * 1024 * 1024,   // 128 MB CPU consumption.
      16 * 1024 * 1024);   // 16 MB GPU consumption.

  const char* expected_output =
      " MEMORY           SOURCE          TOTAL       SETTINGS CONSUME   \n"
      " _______________________________________________________________ \n"
      "|                |               |           |                  |\n"
      "| max_cpu_memory |         Build |  256.0 MB |         128.0 MB |\n"
      "|________________|_______________|___________|__________________|\n"
      "|                |               |           |                  |\n"
      "| max_gpu_memory | Starboard API | <UNKNOWN> |          16.0 MB |\n"
      "|________________|_______________|___________|__________________|\n";

  EXPECT_STREQ(expected_output, actual_output.c_str()) << actual_output;
}

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