| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This tool is used to benchmark the render model used by the compositor | 5 // This tool is used to benchmark the render model used by the compositor |
| 6 | 6 |
| 7 // Most of this file is derived from the source of the tile_render_bench tool, | 7 // Most of this file is derived from the source of the tile_render_bench tool, |
| 8 // and has been changed to support running a sequence of independent | 8 // and has been changed to support running a sequence of independent |
| 9 // simulations for our different render models and test cases. | 9 // simulations for our different render models and test cases. |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "base/memory/scoped_ptr.h" | 31 #include "base/memory/scoped_ptr.h" |
| 32 #include "base/message_loop/message_loop.h" | 32 #include "base/message_loop/message_loop.h" |
| 33 #include "base/time/time.h" | 33 #include "base/time/time.h" |
| 34 | 34 |
| 35 #include "gpu/tools/compositor_model_bench/render_model_utils.h" | 35 #include "gpu/tools/compositor_model_bench/render_model_utils.h" |
| 36 #include "gpu/tools/compositor_model_bench/render_models.h" | 36 #include "gpu/tools/compositor_model_bench/render_models.h" |
| 37 #include "gpu/tools/compositor_model_bench/render_tree.h" | 37 #include "gpu/tools/compositor_model_bench/render_tree.h" |
| 38 | 38 |
| 39 | 39 |
| 40 using base::TimeTicks; | 40 using base::TimeTicks; |
| 41 using file_util::CloseFile; | |
| 42 using base::DirectoryExists; | 41 using base::DirectoryExists; |
| 43 using file_util::OpenFile; | |
| 44 using base::PathExists; | 42 using base::PathExists; |
| 45 using std::queue; | 43 using std::queue; |
| 46 using std::string; | 44 using std::string; |
| 47 | 45 |
| 48 struct SimulationSpecification { | 46 struct SimulationSpecification { |
| 49 string simulation_name; | 47 string simulation_name; |
| 50 base::FilePath input_path; | 48 base::FilePath input_path; |
| 51 RenderModel model_under_test; | 49 RenderModel model_under_test; |
| 52 TimeTicks simulation_start_time; | 50 TimeTicks simulation_start_time; |
| 53 int frames_rendered; | 51 int frames_rendered; |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 reinterpret_cast<XEvent*>(&ev)); | 266 reinterpret_cast<XEvent*>(&ev)); |
| 269 | 267 |
| 270 base::MessageLoop::current()->PostTask( | 268 base::MessageLoop::current()->PostTask( |
| 271 FROM_HERE, | 269 FROM_HERE, |
| 272 base::Bind(&Simulator::UpdateLoop, weak_factory_.GetWeakPtr())); | 270 base::Bind(&Simulator::UpdateLoop, weak_factory_.GetWeakPtr())); |
| 273 } | 271 } |
| 274 | 272 |
| 275 void DumpOutput() { | 273 void DumpOutput() { |
| 276 LOG(INFO) << "Successfully ran " << sims_completed_.size() << " tests"; | 274 LOG(INFO) << "Successfully ran " << sims_completed_.size() << " tests"; |
| 277 | 275 |
| 278 FILE* f = OpenFile(output_path_, "w"); | 276 FILE* f = base::OpenFile(output_path_, "w"); |
| 279 | 277 |
| 280 if (!f) { | 278 if (!f) { |
| 281 LOG(ERROR) << "Failed to open output file " << | 279 LOG(ERROR) << "Failed to open output file " << |
| 282 output_path_.LossyDisplayName(); | 280 output_path_.LossyDisplayName(); |
| 283 exit(-1); | 281 exit(-1); |
| 284 } | 282 } |
| 285 | 283 |
| 286 LOG(INFO) << "Writing results to " << output_path_.LossyDisplayName(); | 284 LOG(INFO) << "Writing results to " << output_path_.LossyDisplayName(); |
| 287 | 285 |
| 288 fputs("{\n\t\"results\": [\n", f); | 286 fputs("{\n\t\"results\": [\n", f); |
| 289 | 287 |
| 290 while (sims_completed_.size()) { | 288 while (sims_completed_.size()) { |
| 291 SimulationSpecification i = sims_completed_.front(); | 289 SimulationSpecification i = sims_completed_.front(); |
| 292 fprintf(f, | 290 fprintf(f, |
| 293 "\t\t{\"simulation_name\":\"%s\",\n" | 291 "\t\t{\"simulation_name\":\"%s\",\n" |
| 294 "\t\t\t\"render_model\":\"%s\",\n" | 292 "\t\t\t\"render_model\":\"%s\",\n" |
| 295 "\t\t\t\"frames_drawn\":%d\n" | 293 "\t\t\t\"frames_drawn\":%d\n" |
| 296 "\t\t},\n", | 294 "\t\t},\n", |
| 297 i.simulation_name.c_str(), | 295 i.simulation_name.c_str(), |
| 298 ModelToString(i.model_under_test), | 296 ModelToString(i.model_under_test), |
| 299 i.frames_rendered); | 297 i.frames_rendered); |
| 300 sims_completed_.pop(); | 298 sims_completed_.pop(); |
| 301 } | 299 } |
| 302 | 300 |
| 303 fputs("\t]\n}", f); | 301 fputs("\t]\n}", f); |
| 304 CloseFile(f); | 302 base::CloseFile(f); |
| 305 } | 303 } |
| 306 | 304 |
| 307 bool UpdateTestStatus() { | 305 bool UpdateTestStatus() { |
| 308 TimeTicks& current_start = sims_remaining_.front().simulation_start_time; | 306 TimeTicks& current_start = sims_remaining_.front().simulation_start_time; |
| 309 base::TimeDelta d = TimeTicks::Now() - current_start; | 307 base::TimeDelta d = TimeTicks::Now() - current_start; |
| 310 if (!current_start.is_null() && d.InSeconds() > seconds_per_test_) { | 308 if (!current_start.is_null() && d.InSeconds() > seconds_per_test_) { |
| 311 CleanupCurrentTest(); | 309 CleanupCurrentTest(); |
| 312 sims_completed_.push(sims_remaining_.front()); | 310 sims_completed_.push(sims_remaining_.front()); |
| 313 sims_remaining_.pop(); | 311 sims_remaining_.pop(); |
| 314 } | 312 } |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 } | 393 } |
| 396 } else { | 394 } else { |
| 397 LOG(INFO) << "(input path is a file)"; | 395 LOG(INFO) << "(input path is a file)"; |
| 398 sim.QueueTest(inPath); | 396 sim.QueueTest(inPath); |
| 399 } | 397 } |
| 400 | 398 |
| 401 sim.Run(); | 399 sim.Run(); |
| 402 | 400 |
| 403 return 0; | 401 return 0; |
| 404 } | 402 } |
| OLD | NEW |