| // Copyright 2013 The Flutter 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 "flutter/shell/platform/common/engine_switches.h" | |
| #include <algorithm> | |
| #include <cstdlib> | |
| #include <iostream> | |
| #include <sstream> | |
| namespace flutter { | |
| std::vector<std::string> GetSwitchesFromEnvironment() { | |
| std::vector<std::string> switches; | |
| // Read engine switches from the environment in debug/profile. If release mode | |
| // support is needed in the future, it should likely use a whitelist. | |
| #ifndef FLUTTER_RELEASE | |
| const char* switch_count_key = "FLUTTER_ENGINE_SWITCHES"; | |
| const int kMaxSwitchCount = 50; | |
| const char* switch_count_string = std::getenv(switch_count_key); | |
| if (!switch_count_string) { | |
| return switches; | |
| } | |
| int switch_count = std::min(kMaxSwitchCount, atoi(switch_count_string)); | |
| for (int i = 1; i <= switch_count; ++i) { | |
| std::ostringstream switch_key; | |
| switch_key << "FLUTTER_ENGINE_SWITCH_" << i; | |
| const char* switch_value = std::getenv(switch_key.str().c_str()); | |
| if (switch_value) { | |
| std::ostringstream switch_value_as_flag; | |
| switch_value_as_flag << "--" << switch_value; | |
| switches.push_back(switch_value_as_flag.str()); | |
| } else { | |
| std::cerr << switch_count << " keys expected from " << switch_count_key | |
| << ", but " << switch_key.str() << " is missing." << std::endl; | |
| } | |
| } | |
| #endif // !FLUTTER_RELEASE | |
| return switches; | |
| } | |
| } // namespace flutter |