Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_43355755
engine
提交
6c262173
E
engine
项目概览
weixin_43355755
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
6c262173
编写于
11月 20, 2020
作者:
J
Jason Simmons
提交者:
GitHub
11月 20, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
libtxt: Clone an ICU line break iterator for each Paragraph/WordBreaker (#22594)
上级
c0b08e8e
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
25 addition
and
10 deletion
+25
-10
third_party/txt/benchmarks/paragraph_benchmarks.cc
third_party/txt/benchmarks/paragraph_benchmarks.cc
+1
-1
third_party/txt/src/minikin/LineBreaker.cpp
third_party/txt/src/minikin/LineBreaker.cpp
+4
-4
third_party/txt/src/minikin/LineBreaker.h
third_party/txt/src/minikin/LineBreaker.h
+4
-1
third_party/txt/src/minikin/WordBreaker.cpp
third_party/txt/src/minikin/WordBreaker.cpp
+12
-2
third_party/txt/src/minikin/WordBreaker.h
third_party/txt/src/minikin/WordBreaker.h
+3
-1
third_party/txt/src/txt/paragraph_txt.cc
third_party/txt/src/txt/paragraph_txt.cc
+1
-1
未找到文件。
third_party/txt/benchmarks/paragraph_benchmarks.cc
浏览文件 @
6c262173
...
...
@@ -405,7 +405,7 @@ BENCHMARK_DEFINE_F(ParagraphFixture, AddStyleRun)(benchmark::State& state) {
paint
.
wordSpacing
=
text_style
.
word_spacing
;
minikin
::
LineBreaker
breaker
;
breaker
.
setLocale
(
icu
::
Locale
(),
nullptr
);
breaker
.
setLocale
();
breaker
.
resize
(
text
.
size
());
memcpy
(
breaker
.
buffer
(),
text
.
data
(),
text
.
size
()
*
sizeof
(
text
[
0
]));
breaker
.
setText
();
...
...
third_party/txt/src/minikin/LineBreaker.cpp
浏览文件 @
6c262173
...
...
@@ -68,10 +68,10 @@ const float SHRINKABILITY = 1.0 / 3.0;
// not precisely match the postBreak width.
const
float
LIBTXT_WIDTH_ADJUST
=
0.00001
;
void
LineBreaker
::
setLocale
(
const
icu
::
Locale
&
locale
,
Hyphenator
*
hyphenator
)
{
mWordBreaker
.
setLocale
(
locale
);
mLocale
=
locale
;
mHyphenator
=
hyphenato
r
;
void
LineBreaker
::
setLocale
()
{
mWordBreaker
.
setLocale
();
mLocale
=
icu
::
Locale
()
;
mHyphenator
=
nullpt
r
;
}
void
LineBreaker
::
setText
()
{
...
...
third_party/txt/src/minikin/LineBreaker.h
浏览文件 @
6c262173
...
...
@@ -97,7 +97,10 @@ class LineBreaker {
// could be here but it's better for performance that it's upstream because of
// the cost of constructing and comparing the ICU Locale object.
// Note: caller is responsible for managing lifetime of hyphenator
void
setLocale
(
const
icu
::
Locale
&
locale
,
Hyphenator
*
hyphenator
);
//
// libtxt extension: always use the default locale so that a cached instance
// of the ICU break iterator can be reused.
void
setLocale
();
void
resize
(
size_t
size
)
{
mTextBuf
.
resize
(
size
);
...
...
third_party/txt/src/minikin/WordBreaker.cpp
浏览文件 @
6c262173
...
...
@@ -31,9 +31,19 @@ namespace minikin {
const
uint32_t
CHAR_SOFT_HYPHEN
=
0x00AD
;
const
uint32_t
CHAR_ZWJ
=
0x200D
;
void
WordBreaker
::
setLocale
(
const
icu
::
Locale
&
locale
)
{
// libtxt extension: avoid the cost of initializing new ICU break iterators
// by constructing a global iterator using the default locale and then
// creating a clone for each WordBreaker instance.
static
std
::
once_flag
gLibtxtBreakIteratorInitFlag
;
static
icu
::
BreakIterator
*
gLibtxtDefaultBreakIterator
=
nullptr
;
void
WordBreaker
::
setLocale
()
{
UErrorCode
status
=
U_ZERO_ERROR
;
mBreakIterator
.
reset
(
icu
::
BreakIterator
::
createLineInstance
(
locale
,
status
));
std
::
call_once
(
gLibtxtBreakIteratorInitFlag
,
[
&
status
]
{
gLibtxtDefaultBreakIterator
=
icu
::
BreakIterator
::
createLineInstance
(
icu
::
Locale
(),
status
);
});
mBreakIterator
.
reset
(
gLibtxtDefaultBreakIterator
->
clone
());
// TODO: handle failure status
if
(
mText
!=
nullptr
)
{
mBreakIterator
->
setText
(
&
mUText
,
status
);
...
...
third_party/txt/src/minikin/WordBreaker.h
浏览文件 @
6c262173
...
...
@@ -33,7 +33,9 @@ class WordBreaker {
public:
~
WordBreaker
()
{
finish
();
}
void
setLocale
(
const
icu
::
Locale
&
locale
);
// libtxt extension: always use the default locale so that a cached instance
// of the ICU break iterator can be reused.
void
setLocale
();
void
setText
(
const
uint16_t
*
data
,
size_t
size
);
...
...
third_party/txt/src/txt/paragraph_txt.cc
浏览文件 @
6c262173
...
...
@@ -229,7 +229,7 @@ void ParagraphTxt::CodeUnitRun::Shift(double delta) {
}
ParagraphTxt
::
ParagraphTxt
()
{
breaker_
.
setLocale
(
icu
::
Locale
(),
nullptr
);
breaker_
.
setLocale
();
}
ParagraphTxt
::~
ParagraphTxt
()
=
default
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录