Index: components/font_service/public/cpp/mapped_font_file.cc |
diff --git a/components/font_service/public/cpp/mapped_font_file.cc b/components/font_service/public/cpp/mapped_font_file.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..98deaafb8f381d48584fdc0fa3a30f442684426b |
--- /dev/null |
+++ b/components/font_service/public/cpp/mapped_font_file.cc |
@@ -0,0 +1,48 @@ |
+// Copyright 2015 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 "components/font_service/public/cpp/mapped_font_file.h" |
+ |
+#include "base/files/file_util.h" |
+#include "base/threading/thread_restrictions.h" |
+#include "skia/ext/refptr.h" |
+#include "skia/ext/skia_utils_base.h" |
+#include "third_party/skia/include/core/SkData.h" |
+#include "third_party/skia/include/core/SkStream.h" |
+ |
+namespace font_service { |
+namespace internal { |
+ |
+MappedFontFile::MappedFontFile(uint32_t font_id) |
+ : font_id_(font_id), observer_(nullptr) {} |
+ |
+bool MappedFontFile::Initialize(base::File file) { |
+ base::ThreadRestrictions::ScopedAllowIO allow_mmap; |
+ return mapped_font_file_.Initialize(file.Pass()); |
+} |
+ |
+SkMemoryStream* MappedFontFile::CreateMemoryStream() { |
+ DCHECK(mapped_font_file_.IsValid()); |
+ auto data = skia::AdoptRef( |
+ SkData::NewWithProc(mapped_font_file_.data(), mapped_font_file_.length(), |
+ &MappedFontFile::ReleaseProc, this)); |
+ if (!data) |
+ return nullptr; |
+ AddRef(); |
+ return new SkMemoryStream(data.get()); |
+} |
+ |
+MappedFontFile::~MappedFontFile() { |
+ if (observer_) |
+ observer_->OnMappedFontFileDestroyed(this); |
+} |
+ |
+// static |
+void MappedFontFile::ReleaseProc(const void* ptr, void* context) { |
+ base::ThreadRestrictions::ScopedAllowIO allow_munmap; |
+ static_cast<MappedFontFile*>(context)->Release(); |
+} |
+ |
+} // namespace internal |
+} // namespace font_service |