Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
b9520248
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
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,发现更多精彩内容 >>
未验证
提交
b9520248
编写于
10月 23, 2020
作者:
D
Dan Field
提交者:
GitHub
10月 23, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add debugDisposed to Image (#21547)
上级
0b26570e
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
85 addition
and
0 deletion
+85
-0
lib/ui/painting.dart
lib/ui/painting.dart
+13
-0
lib/web_ui/lib/src/engine/canvaskit/image.dart
lib/web_ui/lib/src/engine/canvaskit/image.dart
+22
-0
lib/web_ui/lib/src/engine/html_image_codec.dart
lib/web_ui/lib/src/engine/html_image_codec.dart
+13
-0
lib/web_ui/lib/src/ui/painting.dart
lib/web_ui/lib/src/ui/painting.dart
+1
-0
lib/web_ui/test/canvaskit/image_test.dart
lib/web_ui/test/canvaskit/image_test.dart
+6
-0
lib/web_ui/test/engine/image/html_image_codec_test.dart
lib/web_ui/test/engine/image/html_image_codec_test.dart
+8
-0
lib/web_ui/test/golden_tests/engine/recording_canvas_golden_test.dart
...est/golden_tests/engine/recording_canvas_golden_test.dart
+3
-0
testing/dart/image_dispose_test.dart
testing/dart/image_dispose_test.dart
+19
-0
未找到文件。
lib/ui/painting.dart
浏览文件 @
b9520248
...
...
@@ -1632,6 +1632,19 @@ class Image {
}
}
/// Whether this reference to the underlying image is [dispose]d.
///
/// This only returns a valid value if asserts are enabled, and must not be
/// used otherwise.
bool
get
debugDisposed
{
bool
?
disposed
;
assert
(()
{
disposed
=
_disposed
;
return
true
;
}());
return
disposed
??
(
throw
StateError
(
'Image.debugDisposed is only available when asserts are enabled.'
));
}
/// Converts the [Image] object into a byte array.
///
/// The [format] argument specifies the format in which the bytes will be
...
...
lib/web_ui/lib/src/engine/canvaskit/image.dart
浏览文件 @
b9520248
...
...
@@ -54,12 +54,21 @@ class CkAnimatedImage implements ui.Image {
}
}
bool
_disposed
=
false
;
@override
void
dispose
()
{
box
.
delete
();
_disposed
=
true
;
}
@override
bool
get
debugDisposed
{
if
(
assertionsEnabled
)
{
return
_disposed
;
}
throw
StateError
(
'Image.debugDisposed is only available when asserts are enabled.'
);
}
ui
.
Image
clone
()
=>
CkAnimatedImage
.
_
(
_skAnimatedImage
,
box
);
@override
...
...
@@ -138,9 +147,22 @@ class CkImage implements ui.Image {
}
}
bool
_disposed
=
false
;
@override
void
dispose
()
{
box
.
delete
();
assert
(()
{
_disposed
=
true
;
return
true
;
}());
}
@override
bool
get
debugDisposed
{
if
(
assertionsEnabled
)
{
return
_disposed
;
}
throw
StateError
(
'Image.debugDisposed is only available when asserts are enabled.'
);
}
@override
...
...
lib/web_ui/lib/src/engine/html_image_codec.dart
浏览文件 @
b9520248
...
...
@@ -116,12 +116,25 @@ class HtmlImage implements ui.Image {
bool
_requiresClone
=
false
;
HtmlImage
(
this
.
imgElement
,
this
.
width
,
this
.
height
);
bool
_disposed
=
false
;
@override
void
dispose
()
{
// Do nothing. The codec that owns this image should take care of
// releasing the object url.
if
(
assertionsEnabled
)
{
_disposed
=
true
;
}
}
@override
bool
get
debugDisposed
{
if
(
assertionsEnabled
)
{
return
_disposed
;
}
return
throw
StateError
(
'Image.debugDisposed is only available when asserts are enabled.'
);
}
@override
ui
.
Image
clone
()
=>
this
;
...
...
lib/web_ui/lib/src/ui/painting.dart
浏览文件 @
b9520248
...
...
@@ -329,6 +329,7 @@ abstract class Image {
int
get
height
;
Future
<
ByteData
?>
toByteData
({
ImageByteFormat
format
=
ImageByteFormat
.
rawRgba
});
void
dispose
();
bool
get
debugDisposed
;
Image
clone
()
=>
this
;
...
...
lib/web_ui/test/canvaskit/image_test.dart
浏览文件 @
b9520248
...
...
@@ -32,10 +32,13 @@ void testMain() {
final
SkAnimatedImage
skAnimatedImage
=
canvasKit
.
MakeAnimatedImageFromEncoded
(
kTransparentImage
);
final
CkAnimatedImage
image
=
CkAnimatedImage
(
skAnimatedImage
);
expect
(
image
.
box
.
isDeleted
,
false
);
expect
(
image
.
debugDisposed
,
false
);
image
.
dispose
();
expect
(
image
.
box
.
isDeleted
,
true
);
expect
(
image
.
debugDisposed
,
true
);
image
.
dispose
();
expect
(
image
.
box
.
isDeleted
,
true
);
expect
(
image
.
debugDisposed
,
true
);
});
test
(
'CkAnimatedImage can be cloned and explicitly disposed of'
,
()
async
{
...
...
@@ -69,10 +72,13 @@ void testMain() {
test
(
'CkImage can be explicitly disposed of'
,
()
{
final
SkImage
skImage
=
canvasKit
.
MakeAnimatedImageFromEncoded
(
kTransparentImage
).
getCurrentFrame
();
final
CkImage
image
=
CkImage
(
skImage
);
expect
(
image
.
debugDisposed
,
false
);
expect
(
image
.
box
.
isDeleted
,
false
);
image
.
dispose
();
expect
(
image
.
debugDisposed
,
true
);
expect
(
image
.
box
.
isDeleted
,
true
);
image
.
dispose
();
expect
(
image
.
debugDisposed
,
true
);
expect
(
image
.
box
.
isDeleted
,
true
);
});
...
...
lib/web_ui/test/engine/image/html_image_codec_test.dart
浏览文件 @
b9520248
...
...
@@ -63,6 +63,14 @@ void testMain() async {
expect
(
frameInfo
.
image
.
width
,
100
);
expect
(
frameInfo
.
image
.
toString
(),
'[100×100]'
);
});
test
(
'dispose image image'
,
()
async
{
final
HtmlCodec
codec
=
HtmlCodec
(
'sample_image1.png'
);
final
ui
.
FrameInfo
frameInfo
=
await
codec
.
getNextFrame
();
expect
(
frameInfo
.
image
,
isNotNull
);
expect
(
frameInfo
.
image
.
debugDisposed
,
false
);
frameInfo
.
image
.
dispose
();
expect
(
frameInfo
.
image
.
debugDisposed
,
true
);
});
test
(
'provides image loading progress'
,
()
async
{
StringBuffer
buffer
=
new
StringBuffer
();
final
HtmlCodec
codec
=
HtmlCodec
(
'sample_image1.png'
,
...
...
lib/web_ui/test/golden_tests/engine/recording_canvas_golden_test.dart
浏览文件 @
b9520248
...
...
@@ -723,6 +723,9 @@ class TestImage implements Image {
@override
void
dispose
()
{}
@override
bool
get
debugDisposed
=>
false
;
@override
Image
clone
()
=>
this
;
...
...
testing/dart/image_dispose_test.dart
浏览文件 @
b9520248
...
...
@@ -126,6 +126,25 @@ void main() {
expect
(
frame2
.
image
.
clone
()..
dispose
(),
isNotNull
);
frame2
.
image
.
dispose
();
});
test
(
'debugDisposed works'
,
()
async
{
final
Uint8List
bytes
=
await
readFile
(
'2x2.png'
);
final
Codec
codec
=
await
instantiateImageCodec
(
bytes
);
final
FrameInfo
frame
=
await
codec
.
getNextFrame
();
if
(
assertsEnabled
)
{
expect
(
frame
.
image
.
debugDisposed
,
false
);
}
else
{
expect
(()
=>
frame
.
image
.
debugDisposed
,
throwsStateError
);
}
frame
.
image
.
dispose
();
if
(
assertsEnabled
)
{
expect
(
frame
.
image
.
debugDisposed
,
true
);
}
else
{
expect
(()
=>
frame
.
image
.
debugDisposed
,
throwsStateError
);
}
});
}
Future
<
Uint8List
>
readFile
(
String
fileName
)
async
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录