| 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 #include "content/renderer/gpu/gpu_benchmarking_extension.h" | 5 #include "content/renderer/gpu/gpu_benchmarking_extension.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 void InitSkGraphics() { | 42 void InitSkGraphics() { |
| 43 static bool init = false; | 43 static bool init = false; |
| 44 if (!init) { | 44 if (!init) { |
| 45 SkGraphics::Init(); | 45 SkGraphics::Init(); |
| 46 init = true; | 46 init = true; |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 | 49 |
| 50 class SkPictureRecorder : public WebViewBenchmarkSupport::PaintClient { | 50 class SkPictureRecorder : public WebViewBenchmarkSupport::PaintClient { |
| 51 public: | 51 public: |
| 52 explicit SkPictureRecorder(const FilePath& dirpath) | 52 explicit SkPictureRecorder(const base::FilePath& dirpath) |
| 53 : dirpath_(dirpath), | 53 : dirpath_(dirpath), |
| 54 layer_id_(0) { | 54 layer_id_(0) { |
| 55 // Let skia register known effect subclasses. This basically enables | 55 // Let skia register known effect subclasses. This basically enables |
| 56 // reflection on those subclasses required for picture serialization. | 56 // reflection on those subclasses required for picture serialization. |
| 57 InitSkGraphics(); | 57 InitSkGraphics(); |
| 58 } | 58 } |
| 59 | 59 |
| 60 virtual WebCanvas* willPaint(const WebSize& size) { | 60 virtual WebCanvas* willPaint(const WebSize& size) { |
| 61 return picture_.beginRecording(size.width, size.height); | 61 return picture_.beginRecording(size.width, size.height); |
| 62 } | 62 } |
| 63 | 63 |
| 64 virtual void didPaint(WebCanvas* canvas) { | 64 virtual void didPaint(WebCanvas* canvas) { |
| 65 DCHECK(canvas == picture_.getRecordingCanvas()); | 65 DCHECK(canvas == picture_.getRecordingCanvas()); |
| 66 picture_.endRecording(); | 66 picture_.endRecording(); |
| 67 // Serialize picture to file. | 67 // Serialize picture to file. |
| 68 // TODO(alokp): Note that for this to work Chrome needs to be launched with | 68 // TODO(alokp): Note that for this to work Chrome needs to be launched with |
| 69 // --no-sandbox command-line flag. Get rid of this limitation. | 69 // --no-sandbox command-line flag. Get rid of this limitation. |
| 70 // CRBUG: 139640. | 70 // CRBUG: 139640. |
| 71 std::string filename = "layer_" + base::IntToString(layer_id_++) + ".skp"; | 71 std::string filename = "layer_" + base::IntToString(layer_id_++) + ".skp"; |
| 72 std::string filepath = dirpath_.AppendASCII(filename).MaybeAsASCII(); | 72 std::string filepath = dirpath_.AppendASCII(filename).MaybeAsASCII(); |
| 73 DCHECK(!filepath.empty()); | 73 DCHECK(!filepath.empty()); |
| 74 SkFILEWStream file(filepath.c_str()); | 74 SkFILEWStream file(filepath.c_str()); |
| 75 DCHECK(file.isValid()); | 75 DCHECK(file.isValid()); |
| 76 picture_.serialize(&file); | 76 picture_.serialize(&file); |
| 77 } | 77 } |
| 78 | 78 |
| 79 private: | 79 private: |
| 80 FilePath dirpath_; | 80 base::FilePath dirpath_; |
| 81 int layer_id_; | 81 int layer_id_; |
| 82 SkPicture picture_; | 82 SkPicture picture_; |
| 83 }; | 83 }; |
| 84 | 84 |
| 85 class RenderingStatsEnumerator : public cc::RenderingStats::Enumerator { | 85 class RenderingStatsEnumerator : public cc::RenderingStats::Enumerator { |
| 86 public: | 86 public: |
| 87 RenderingStatsEnumerator(v8::Handle<v8::Object> stats_object) | 87 RenderingStatsEnumerator(v8::Handle<v8::Object> stats_object) |
| 88 : stats_object(stats_object) { } | 88 : stats_object(stats_object) { } |
| 89 | 89 |
| 90 virtual void AddInt64(const char* name, int64 value) OVERRIDE { | 90 virtual void AddInt64(const char* name, int64 value) OVERRIDE { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 return v8::Undefined(); | 213 return v8::Undefined(); |
| 214 | 214 |
| 215 WebView* web_view = web_frame->view(); | 215 WebView* web_view = web_frame->view(); |
| 216 if (!web_view) | 216 if (!web_view) |
| 217 return v8::Undefined(); | 217 return v8::Undefined(); |
| 218 | 218 |
| 219 WebViewBenchmarkSupport* benchmark_support = web_view->benchmarkSupport(); | 219 WebViewBenchmarkSupport* benchmark_support = web_view->benchmarkSupport(); |
| 220 if (!benchmark_support) | 220 if (!benchmark_support) |
| 221 return v8::Undefined(); | 221 return v8::Undefined(); |
| 222 | 222 |
| 223 FilePath dirpath(FilePath::StringType(*dirname, | 223 base::FilePath dirpath( |
| 224 *dirname + dirname.length())); | 224 base::FilePath::StringType(*dirname, *dirname + dirname.length())); |
| 225 if (!file_util::CreateDirectory(dirpath) || | 225 if (!file_util::CreateDirectory(dirpath) || |
| 226 !file_util::PathIsWritable(dirpath)) { | 226 !file_util::PathIsWritable(dirpath)) { |
| 227 std::string msg("Path is not writable: "); | 227 std::string msg("Path is not writable: "); |
| 228 msg.append(dirpath.MaybeAsASCII()); | 228 msg.append(dirpath.MaybeAsASCII()); |
| 229 return v8::ThrowException(v8::Exception::Error( | 229 return v8::ThrowException(v8::Exception::Error( |
| 230 v8::String::New(msg.c_str(), msg.length()))); | 230 v8::String::New(msg.c_str(), msg.length()))); |
| 231 } | 231 } |
| 232 | 232 |
| 233 SkPictureRecorder recorder(dirpath); | 233 SkPictureRecorder recorder(dirpath); |
| 234 benchmark_support->paint(&recorder, | 234 benchmark_support->paint(&recorder, |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 | 449 |
| 450 return v8::Undefined(); | 450 return v8::Undefined(); |
| 451 } | 451 } |
| 452 }; | 452 }; |
| 453 | 453 |
| 454 v8::Extension* GpuBenchmarkingExtension::Get() { | 454 v8::Extension* GpuBenchmarkingExtension::Get() { |
| 455 return new GpuBenchmarkingWrapper(); | 455 return new GpuBenchmarkingWrapper(); |
| 456 } | 456 } |
| 457 | 457 |
| 458 } // namespace content | 458 } // namespace content |
| OLD | NEW |