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

Side by Side Diff: components/printing/renderer/print_render_frame_helper_mac.mm

Issue 2920013002: Use pdf compositor service for printing when OOPIF is enabled
Patch Set: rebase Created 3 years, 4 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 unified diff | Download patch
OLDNEW
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 "components/printing/renderer/print_render_frame_helper.h" 5 #include "components/printing/renderer/print_render_frame_helper.h"
6 6
7 #import <AppKit/AppKit.h> 7 #import <AppKit/AppKit.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/mac/scoped_nsautorelease_pool.h" 10 #include "base/mac/scoped_nsautorelease_pool.h"
(...skipping 27 matching lines...) Expand all
38 frame); 38 frame);
39 return true; 39 return true;
40 } 40 }
41 #endif // BUILDFLAG(ENABLE_BASIC_PRINTING) 41 #endif // BUILDFLAG(ENABLE_BASIC_PRINTING)
42 42
43 void PrintRenderFrameHelper::PrintPagesInternal( 43 void PrintRenderFrameHelper::PrintPagesInternal(
44 const PrintMsg_Print_Params& params, 44 const PrintMsg_Print_Params& params,
45 const std::vector<int>& printed_pages, 45 const std::vector<int>& printed_pages,
46 int page_count, 46 int page_count,
47 blink::WebLocalFrame* frame) { 47 blink::WebLocalFrame* frame) {
48 PdfMetafileSkia metafile(PDF_SKIA_DOCUMENT_TYPE); 48 PdfMetafileSkia metafile(params.printed_doc_type);
49 CHECK(metafile.Init()); 49 CHECK(metafile.Init());
50 50
51 gfx::Size page_size_in_dpi; 51 gfx::Size page_size_in_dpi;
52 gfx::Rect content_area_in_dpi; 52 gfx::Rect content_area_in_dpi;
53 for (int page_number : printed_pages) { 53 for (int page_number : printed_pages) {
54 RenderPage(params, page_number, page_count, frame, false, &metafile, 54 RenderPage(params, page_number, page_count, frame, false, &metafile,
55 &page_size_in_dpi, &content_area_in_dpi); 55 &page_size_in_dpi, &content_area_in_dpi);
56 } 56 }
57 metafile.FinishDocument(); 57 metafile.FinishDocument();
58 58
59 PrintHostMsg_DidPrintPage_Params page_params; 59 PrintHostMsg_DidPrintPage_Params page_params;
60 page_params.data_size = metafile.GetDataSize(); 60 page_params.data_size = metafile.GetDataSize();
61 page_params.document_cookie = params.document_cookie; 61 page_params.document_cookie = params.document_cookie;
62 page_params.page_size = page_size_in_dpi; 62 page_params.page_size = page_size_in_dpi;
63 page_params.content_area = content_area_in_dpi; 63 page_params.content_area = content_area_in_dpi;
64 64
65 // Ask the browser to create the shared memory for us. 65 // Ask the browser to create the shared memory for us.
66 if (!CopyMetafileDataToSharedMem(metafile, 66 if (!CopyMetafileDataToSharedMem(metafile,
67 &(page_params.metafile_data_handle))) { 67 &page_params.metafile_data_handle)) {
68 // TODO(thestig): Fail and return false instead. 68 // TODO(thestig): Fail and return false instead.
69 page_params.data_size = 0; 69 page_params.data_size = 0;
70 } 70 }
71 71
72 for (int page_number : printed_pages) { 72 for (int page_number : printed_pages) {
73 page_params.page_number = page_number; 73 page_params.page_number = page_number;
74 Send(new PrintHostMsg_DidPrintPage(routing_id(), page_params)); 74 Send(new PrintHostMsg_DidPrintPage(routing_id(), page_params));
75 page_params.metafile_data_handle = base::SharedMemoryHandle(); 75 page_params.metafile_data_handle = base::SharedMemoryHandle();
76 } 76 }
77 } 77 }
78 78
79 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) 79 #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
80 bool PrintRenderFrameHelper::RenderPreviewPage( 80 bool PrintRenderFrameHelper::RenderPreviewPage(
81 int page_number, 81 int page_number,
82 const PrintMsg_Print_Params& print_params) { 82 const PrintMsg_Print_Params& print_params) {
83 PrintMsg_Print_Params printParams = print_params;
84 std::unique_ptr<PdfMetafileSkia> draft_metafile; 83 std::unique_ptr<PdfMetafileSkia> draft_metafile;
85 PdfMetafileSkia* initial_render_metafile = print_preview_context_.metafile(); 84 PdfMetafileSkia* initial_render_metafile = print_preview_context_.metafile();
86 85
87 bool render_to_draft = 86 bool render_to_draft =
88 print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_; 87 print_preview_context_.IsModifiable() && is_print_ready_metafile_sent_;
89 88
90 if (render_to_draft) { 89 if (render_to_draft) {
91 draft_metafile.reset(new PdfMetafileSkia(PDF_SKIA_DOCUMENT_TYPE)); 90 draft_metafile.reset(new PdfMetafileSkia(print_params.printed_doc_type));
92 CHECK(draft_metafile->Init()); 91 CHECK(draft_metafile->Init());
93 initial_render_metafile = draft_metafile.get(); 92 initial_render_metafile = draft_metafile.get();
94 } 93 }
95 94
96 base::TimeTicks begin_time = base::TimeTicks::Now(); 95 base::TimeTicks begin_time = base::TimeTicks::Now();
97 gfx::Size page_size; 96 gfx::Size page_size;
98 RenderPage(printParams, page_number, 97 RenderPage(print_params, page_number,
99 print_preview_context_.total_page_count(), 98 print_preview_context_.total_page_count(),
100 print_preview_context_.prepared_frame(), true, 99 print_preview_context_.prepared_frame(), true,
101 initial_render_metafile, &page_size, NULL); 100 initial_render_metafile, &page_size, NULL);
102 print_preview_context_.RenderedPreviewPage(base::TimeTicks::Now() - 101 print_preview_context_.RenderedPreviewPage(base::TimeTicks::Now() -
103 begin_time); 102 begin_time);
104 103
105 if (draft_metafile.get()) { 104 if (draft_metafile.get()) {
106 draft_metafile->FinishDocument(); 105 draft_metafile->FinishDocument();
107 } else { 106 } else {
108 if (print_preview_context_.IsModifiable() && 107 if (print_preview_context_.IsModifiable() &&
109 print_preview_context_.generate_draft_pages()) { 108 print_preview_context_.generate_draft_pages()) {
110 DCHECK(!draft_metafile.get()); 109 DCHECK(!draft_metafile.get());
111 draft_metafile = 110 draft_metafile =
112 print_preview_context_.metafile()->GetMetafileForCurrentPage( 111 print_preview_context_.metafile()->GetMetafileForCurrentPage(
113 PDF_SKIA_DOCUMENT_TYPE); 112 print_params.printed_doc_type);
114 } 113 }
115 } 114 }
116 return PreviewPageRendered(page_number, draft_metafile.get()); 115 return PreviewPageRendered(page_number, draft_metafile.get());
117 } 116 }
118 #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) 117 #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
119 118
120 void PrintRenderFrameHelper::RenderPage(const PrintMsg_Print_Params& params, 119 void PrintRenderFrameHelper::RenderPage(const PrintMsg_Print_Params& params,
121 int page_number, 120 int page_number,
122 int page_count, 121 int page_count,
123 blink::WebLocalFrame* frame, 122 blink::WebLocalFrame* frame,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 } 158 }
160 RenderPageContent(frame, page_number, canvas_area, content_area, 159 RenderPageContent(frame, page_number, canvas_area, content_area,
161 scale_factor, static_cast<blink::WebCanvas*>(canvas)); 160 scale_factor, static_cast<blink::WebCanvas*>(canvas));
162 } 161 }
163 162
164 // Done printing. Close the device context to retrieve the compiled metafile. 163 // Done printing. Close the device context to retrieve the compiled metafile.
165 metafile->FinishPage(); 164 metafile->FinishPage();
166 } 165 }
167 166
168 } // namespace printing 167 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698