/*
 * 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/common/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
