Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: chrome/renderer/print_web_view_helper_win.cc

Issue 7365003: Print Preview: Make preview generation event driven to eliminate synchronous messages. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: clang fix Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/print_web_view_helper_mac.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/print_web_view_helper_win.cc
===================================================================
--- chrome/renderer/print_web_view_helper_win.cc (revision 92822)
+++ chrome/renderer/print_web_view_helper_win.cc (working copy)
@@ -123,93 +123,23 @@
Send(new PrintHostMsg_DidPrintPage(routing_id(), page_params));
}
-bool PrintWebViewHelper::CreatePreviewDocument(
- const PrintMsg_PrintPages_Params& params, WebKit::WebFrame* frame,
- WebKit::WebNode* node) {
- if (!PreviewPageRendered(-1))
- return false;
-
- PrintMsg_Print_Params print_params = params.params;
- UpdatePrintableSizeInPrintParameters(frame, node, &print_params);
- PrepareFrameAndViewForPrint prep_frame_view(print_params, frame, node,
- frame->view());
- if (!PreviewPageRendered(-1))
- return false;
-
- preview_page_count_ = prep_frame_view.GetExpectedPageCount();
- if (!preview_page_count_)
- return false;
- Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(),
- preview_page_count_));
-
- scoped_ptr<Metafile> metafile(new printing::PreviewMetafile);
- metafile->Init();
-
+void PrintWebViewHelper::RenderPreviewPage(int page_number) {
+ PrintMsg_Print_Params print_params = print_preview_context_.print_params();
// Calculate the dpi adjustment.
- float shrink = static_cast<float>(print_params.desired_dpi /
- print_params.dpi);
+ float scale_factor = static_cast<float>(print_params.desired_dpi /
+ print_params.dpi);
+ // Needed for RenderPage() below.
+ // Not taking ownership with intent to reset().
+ scoped_ptr<Metafile> metafile(print_preview_context_.metafile());
base::TimeTicks begin_time = base::TimeTicks::Now();
- base::TimeTicks page_begin_time = begin_time;
-
- if (params.pages.empty()) {
- for (int i = 0; i < preview_page_count_; ++i) {
- float scale_factor = shrink;
- RenderPage(print_params, &scale_factor, i, true, frame, &metafile);
- page_begin_time = ReportPreviewPageRenderTime(page_begin_time);
- if (!PreviewPageRendered(i))
- return false;
- }
- } else {
- for (size_t i = 0; i < params.pages.size(); ++i) {
- if (params.pages[i] >= preview_page_count_)
- break;
- float scale_factor = shrink;
- RenderPage(print_params, &scale_factor, params.pages[i], true, frame,
- &metafile);
- page_begin_time = ReportPreviewPageRenderTime(page_begin_time);
- if (!PreviewPageRendered(params.pages[i]))
- return false;
- }
- }
-
- base::TimeDelta render_time = base::TimeTicks::Now() - begin_time;
-
- // Ensure that printing has finished before we start cleaning up and
- // allocating buffers; this causes prep_frame_view to flush anything pending
- // into the metafile. Then we can get the final size and copy it into a
- // shared segment.
- prep_frame_view.FinishPrinting();
-
- if (!metafile->FinishDocument())
- NOTREACHED();
-
- ReportTotalPreviewGenerationTime(params.pages.size(),
- preview_page_count_,
- render_time,
- base::TimeTicks::Now() - begin_time);
-
- // Get the size of the compiled metafile.
- uint32 buf_size = metafile->GetDataSize();
- DCHECK_GT(buf_size, 128u);
-
- PrintHostMsg_DidPreviewDocument_Params preview_params;
- preview_params.reuse_existing_data = false;
- preview_params.data_size = buf_size;
- preview_params.document_cookie = params.params.document_cookie;
- preview_params.expected_pages_count = preview_page_count_;
- preview_params.modifiable = IsModifiable(frame, node);
- preview_params.preview_request_id = params.params.preview_request_id;
-
- if (!CopyMetafileDataToSharedMem(metafile.get(),
- &(preview_params.metafile_data_handle))) {
- return false;
- }
- Send(new PrintHostMsg_DuplicateSection(routing_id(),
- preview_params.metafile_data_handle,
- &preview_params.metafile_data_handle));
- Send(new PrintHostMsg_PagesReadyForPreview(routing_id(), preview_params));
- return true;
+ RenderPage(print_params, &scale_factor, page_number, true,
+ print_preview_context_.frame(), &metafile);
+ // Release since |print_preview_context_| is the real owner.
+ metafile.release();
+ print_preview_context_.RenderedPreviewPage(
+ base::TimeTicks::Now() - begin_time);
+ PreviewPageRendered(page_number);
}
void PrintWebViewHelper::RenderPage(
« no previous file with comments | « chrome/renderer/print_web_view_helper_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698