|  | // Copyright (c) 2012 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 "multiprocess_func_list.h" | 
|  |  | 
|  | #include <map> | 
|  |  | 
|  | // Helper functions to maintain mapping of "test name"->test func. | 
|  | // The information is accessed via a global map. | 
|  | namespace multi_process_function_list { | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | struct ProcessFunctions { | 
|  | ProcessFunctions() : main(NULL), setup(NULL) {} | 
|  | ProcessFunctions(TestMainFunctionPtr main, SetupFunctionPtr setup) | 
|  | : main(main), | 
|  | setup(setup) { | 
|  | } | 
|  | TestMainFunctionPtr main; | 
|  | SetupFunctionPtr setup; | 
|  | }; | 
|  |  | 
|  | typedef std::map<std::string, ProcessFunctions> MultiProcessTestMap; | 
|  |  | 
|  | // Retrieve a reference to the global 'func name' -> func ptr map. | 
|  | MultiProcessTestMap& GetMultiprocessFuncMap() { | 
|  | static MultiProcessTestMap test_name_to_func_ptr_map; | 
|  | return test_name_to_func_ptr_map; | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | AppendMultiProcessTest::AppendMultiProcessTest( | 
|  | std::string test_name, | 
|  | TestMainFunctionPtr main_func_ptr, | 
|  | SetupFunctionPtr setup_func_ptr) { | 
|  | GetMultiprocessFuncMap()[test_name] = | 
|  | ProcessFunctions(main_func_ptr, setup_func_ptr); | 
|  | } | 
|  |  | 
|  | int InvokeChildProcessTest(std::string test_name) { | 
|  | MultiProcessTestMap& func_lookup_table = GetMultiprocessFuncMap(); | 
|  | MultiProcessTestMap::iterator it = func_lookup_table.find(test_name); | 
|  | if (it != func_lookup_table.end()) { | 
|  | const ProcessFunctions& process_functions = it->second; | 
|  | if (process_functions.setup) | 
|  | (*process_functions.setup)(); | 
|  | if (process_functions.main) | 
|  | return (*process_functions.main)(); | 
|  | } | 
|  |  | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | }  // namespace multi_process_function_list |