Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉迷打码的小凳子
glide
提交
cecec2be
G
glide
项目概览
沉迷打码的小凳子
/
glide
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
glide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cecec2be
编写于
6月 22, 2014
作者:
S
Sam Judd
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use priorities for requests fulfilled from cache.
上级
1e1f4982
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
83 addition
and
55 deletion
+83
-55
library/src/main/java/com/bumptech/glide/load/engine/DefaultResourceRunnerFactory.java
...ptech/glide/load/engine/DefaultResourceRunnerFactory.java
+5
-5
library/src/main/java/com/bumptech/glide/load/engine/EngineBuilder.java
...in/java/com/bumptech/glide/load/engine/EngineBuilder.java
+27
-8
library/src/main/java/com/bumptech/glide/load/engine/ResourceRunner.java
...n/java/com/bumptech/glide/load/engine/ResourceRunner.java
+20
-13
library/src/main/java/com/bumptech/glide/request/ThumbnailRequestCoordinator.java
...m/bumptech/glide/request/ThumbnailRequestCoordinator.java
+3
-3
library/src/test/java/com/bumptech/glide/GlideTest.java
library/src/test/java/com/bumptech/glide/GlideTest.java
+2
-1
library/src/test/java/com/bumptech/glide/load/engine/DefaultResourceRunnerFactoryTest.java
...h/glide/load/engine/DefaultResourceRunnerFactoryTest.java
+3
-3
library/src/test/java/com/bumptech/glide/load/engine/ResourceRunnerTest.java
...va/com/bumptech/glide/load/engine/ResourceRunnerTest.java
+23
-14
library/src/test/java/com/bumptech/glide/request/ThumbnailRequestCoordinatorTest.java
...mptech/glide/request/ThumbnailRequestCoordinatorTest.java
+0
-8
未找到文件。
library/src/main/java/com/bumptech/glide/load/engine/DefaultResourceRunnerFactory.java
浏览文件 @
cecec2be
...
...
@@ -15,19 +15,19 @@ import java.io.InputStream;
import
java.util.concurrent.ExecutorService
;
class
DefaultResourceRunnerFactory
implements
ResourceRunnerFactory
{
private
final
Handler
bgHandler
;
private
MemoryCache
memoryCache
;
private
DiskCache
diskCache
;
private
Handler
mainHandler
;
private
ExecutorService
diskCacheService
;
private
ExecutorService
service
;
public
DefaultResourceRunnerFactory
(
MemoryCache
memoryCache
,
DiskCache
diskCache
,
Handler
mainHandler
,
ExecutorService
service
,
Handler
bgHandler
)
{
ExecutorService
diskCacheService
,
ExecutorService
resizeService
)
{
this
.
memoryCache
=
memoryCache
;
this
.
diskCache
=
diskCache
;
this
.
mainHandler
=
mainHandler
;
this
.
service
=
s
ervice
;
this
.
bgHandler
=
bgHandler
;
this
.
diskCacheService
=
diskCacheS
ervice
;
this
.
service
=
resizeService
;
}
@Override
...
...
@@ -42,6 +42,6 @@ class DefaultResourceRunnerFactory implements ResourceRunnerFactory {
decoder
,
transformation
,
encoder
,
transcoder
,
diskCache
,
priority
,
engineJob
);
return
new
ResourceRunner
<
Z
,
R
>(
key
,
width
,
height
,
diskCache
,
cacheDecoder
,
transformation
,
transcoder
,
sourceRunner
,
service
,
bgHandler
,
engineJob
);
sourceRunner
,
diskCacheService
,
service
,
engineJob
,
priority
);
}
}
library/src/main/java/com/bumptech/glide/load/engine/EngineBuilder.java
浏览文件 @
cecec2be
...
...
@@ -3,6 +3,7 @@ package com.bumptech.glide.load.engine;
import
android.os.Handler
;
import
android.os.HandlerThread
;
import
android.os.Looper
;
import
android.os.Message
;
import
com.bumptech.glide.load.engine.executor.FifoPriorityThreadPoolExecutor
;
import
com.bumptech.glide.load.engine.cache.DiskCache
;
import
com.bumptech.glide.load.engine.cache.MemoryCache
;
...
...
@@ -13,7 +14,8 @@ public class EngineBuilder {
final
MemoryCache
memoryCache
;
final
DiskCache
diskCache
;
private
ExecutorService
service
;
private
ExecutorService
diskCacheService
;
private
ExecutorService
resizeService
;
private
Handler
bgHandler
;
ResourceRunnerFactory
factory
;
...
...
@@ -24,8 +26,13 @@ public class EngineBuilder {
this
.
diskCache
=
diskCache
;
}
public
EngineBuilder
setExecutorService
(
ExecutorService
service
)
{
this
.
service
=
service
;
public
EngineBuilder
setResizeService
(
ExecutorService
service
)
{
resizeService
=
service
;
return
this
;
}
public
EngineBuilder
setDiskCacheService
(
ExecutorService
service
)
{
diskCacheService
=
service
;
return
this
;
}
...
...
@@ -35,9 +42,12 @@ public class EngineBuilder {
}
public
Engine
build
()
{
if
(
s
ervice
==
null
)
{
if
(
resizeS
ervice
==
null
)
{
final
int
cores
=
Math
.
max
(
1
,
Runtime
.
getRuntime
().
availableProcessors
());
service
=
new
FifoPriorityThreadPoolExecutor
(
cores
);
resizeService
=
new
FifoPriorityThreadPoolExecutor
(
cores
);
}
if
(
diskCacheService
==
null
)
{
diskCacheService
=
new
FifoPriorityThreadPoolExecutor
(
1
);
}
if
(
bgHandler
==
null
)
{
...
...
@@ -49,14 +59,23 @@ public class EngineBuilder {
}
};
handlerThread
.
start
();
bgHandler
=
new
Handler
(
handlerThread
.
getLooper
());
bgHandler
=
new
Handler
(
handlerThread
.
getLooper
(),
new
Handler
.
Callback
()
{
@Override
public
boolean
handleMessage
(
Message
message
)
{
if
(
message
.
what
==
0
)
{
((
Runnable
)
message
.
obj
).
run
();
return
true
;
}
return
false
;
}
});
}
keyFactory
=
new
EngineKeyFactory
();
factory
=
new
DefaultResourceRunnerFactory
(
memoryCache
,
diskCache
,
new
Handler
(
Looper
.
getMainLooper
()),
service
,
bgHandler
);
factory
=
new
DefaultResourceRunnerFactory
(
memoryCache
,
diskCache
,
new
Handler
(
Looper
.
getMainLooper
()),
diskCacheService
,
resizeService
);
return
new
Engine
(
this
);
}
...
...
library/src/main/java/com/bumptech/glide/load/engine/ResourceRunner.java
浏览文件 @
cecec2be
package
com.bumptech.glide.load.engine
;
import
android.os.Handler
;
import
android.os.SystemClock
;
import
android.util.Log
;
import
com.bumptech.glide.Priority
;
import
com.bumptech.glide.Resource
;
import
com.bumptech.glide.load.Key
;
import
com.bumptech.glide.load.ResourceDecoder
;
import
com.bumptech.glide.load.Transformation
;
import
com.bumptech.glide.load.engine.cache.DiskCache
;
import
com.bumptech.glide.load.engine.executor.Prioritized
;
import
com.bumptech.glide.load.resource.transcode.ResourceTranscoder
;
import
java.io.IOException
;
...
...
@@ -20,27 +21,28 @@ import java.util.concurrent.Future;
* @param <Z> The type of the resource that will be decoded.
* @param <R> the type of the resource the decoded resource will be transcoded to.
*/
public
class
ResourceRunner
<
Z
,
R
>
implements
Runnable
{
public
class
ResourceRunner
<
Z
,
R
>
implements
Runnable
,
Prioritized
{
private
static
final
String
TAG
=
"ResourceRunner"
;
private
final
Key
key
;
private
Transformation
<
Z
>
transformation
;
private
ResourceTranscoder
<
Z
,
R
>
transcoder
;
private
final
Transformation
<
Z
>
transformation
;
private
final
ResourceTranscoder
<
Z
,
R
>
transcoder
;
private
final
SourceResourceRunner
sourceRunner
;
private
final
ExecutorService
executorService
;
private
final
EngineJob
job
;
private
final
Priority
priority
;
private
final
ResourceDecoder
<
InputStream
,
Z
>
cacheDecoder
;
private
final
int
width
;
private
final
int
height
;
private
final
DiskCache
diskCache
;
private
final
Handler
bgHandler
;
private
final
ExecutorService
diskCacheService
;
private
final
ExecutorService
resizeService
;
private
volatile
Future
<?>
future
;
private
volatile
boolean
isCancelled
;
public
ResourceRunner
(
Key
key
,
int
width
,
int
height
,
DiskCache
diskCache
,
ResourceDecoder
<
InputStream
,
Z
>
cacheDecoder
,
Transformation
<
Z
>
transformation
,
ResourceTranscoder
<
Z
,
R
>
transcoder
,
SourceResourceRunner
sourceRunner
,
ExecutorService
executor
Service
,
Handler
bgHandler
,
EngineJob
job
)
{
ResourceTranscoder
<
Z
,
R
>
transcoder
,
SourceResourceRunner
sourceRunner
,
ExecutorService
diskCache
Service
,
ExecutorService
resizeService
,
EngineJob
job
,
Priority
priority
)
{
this
.
key
=
key
;
this
.
width
=
width
;
this
.
height
=
height
;
...
...
@@ -49,9 +51,10 @@ public class ResourceRunner<Z, R> implements Runnable {
this
.
transformation
=
transformation
;
this
.
transcoder
=
transcoder
;
this
.
sourceRunner
=
sourceRunner
;
this
.
executorService
=
executor
Service
;
this
.
bgHandler
=
bgHandler
;
this
.
diskCacheService
=
diskCache
Service
;
this
.
resizeService
=
resizeService
;
this
.
job
=
job
;
this
.
priority
=
priority
;
}
public
EngineJob
getJob
()
{
...
...
@@ -60,7 +63,6 @@ public class ResourceRunner<Z, R> implements Runnable {
public
void
cancel
()
{
isCancelled
=
true
;
bgHandler
.
removeCallbacks
(
this
);
if
(
future
!=
null
)
{
future
.
cancel
(
false
);
}
...
...
@@ -68,7 +70,7 @@ public class ResourceRunner<Z, R> implements Runnable {
}
public
void
queue
()
{
bgHandler
.
pos
t
(
this
);
future
=
diskCacheService
.
submi
t
(
this
);
}
@Override
...
...
@@ -90,7 +92,7 @@ public class ResourceRunner<Z, R> implements Runnable {
Resource
<
R
>
transcoded
=
transcoder
.
transcode
(
transformed
);
job
.
onResourceReady
(
transcoded
);
}
else
{
future
=
executor
Service
.
submit
(
sourceRunner
);
future
=
resize
Service
.
submit
(
sourceRunner
);
}
}
...
...
@@ -114,4 +116,9 @@ public class ResourceRunner<Z, R> implements Runnable {
}
return
result
;
}
@Override
public
int
getPriority
()
{
return
priority
.
ordinal
();
}
}
library/src/main/java/com/bumptech/glide/request/ThumbnailRequestCoordinator.java
浏览文件 @
cecec2be
...
...
@@ -30,12 +30,12 @@ public class ThumbnailRequestCoordinator implements RequestCoordinator, Request
@Override
public
void
run
()
{
if
(!
thumb
.
isRunning
())
{
thumb
.
run
();
}
if
(!
full
.
isRunning
())
{
full
.
run
();
}
if
(!
full
.
isComplete
()
&&
!
thumb
.
isRunning
())
{
thumb
.
run
();
}
}
@Override
...
...
library/src/test/java/com/bumptech/glide/GlideTest.java
浏览文件 @
cecec2be
...
...
@@ -127,7 +127,8 @@ public class GlideTest {
requestQueue
.
start
();
Glide
.
setup
(
new
GlideBuilder
(
Robolectric
.
application
)
.
setEngine
(
new
EngineBuilder
(
mock
(
MemoryCache
.
class
),
mock
(
DiskCache
.
class
))
.
setExecutorService
(
service
)
.
setDiskCacheService
(
service
)
.
setResizeService
(
service
)
.
setBackgroundHandler
(
bgHandler
)
.
build
())
.
setRequestQueue
(
requestQueue
));
...
...
library/src/test/java/com/bumptech/glide/load/engine/DefaultResourceRunnerFactoryTest.java
浏览文件 @
cecec2be
...
...
@@ -41,14 +41,14 @@ public class DefaultResourceRunnerFactoryTest {
EngineJobListener
listener
=
mock
(
EngineJobListener
.
class
);
DiskCache
diskCache
=
mock
(
DiskCache
.
class
);
Handler
mainHandler
=
new
Handler
();
Handler
bgHandler
=
mock
(
Handler
.
class
);
ExecutorService
s
ervice
=
mock
(
ExecutorService
.
class
);
ExecutorService
diskCacheService
=
mock
(
ExecutorService
.
class
);
ExecutorService
resizeS
ervice
=
mock
(
ExecutorService
.
class
);
Transformation
<
Object
>
transformation
=
mock
(
Transformation
.
class
);
int
width
=
100
;
int
height
=
100
;
DefaultResourceRunnerFactory
factory
=
new
DefaultResourceRunnerFactory
(
memoryCache
,
diskCache
,
mainHandler
,
service
,
bgHandler
);
mainHandler
,
diskCacheService
,
resizeService
);
ResourceDecoder
<
InputStream
,
Object
>
cacheDecoder
=
mock
(
ResourceDecoder
.
class
);
DataFetcher
<
Object
>
fetcher
=
mock
(
DataFetcher
.
class
);
...
...
library/src/test/java/com/bumptech/glide/load/engine/ResourceRunnerTest.java
浏览文件 @
cecec2be
package
com.bumptech.glide.load.engine
;
import
android.os.Handler
;
import
com.bumptech.glide.Priority
;
import
com.bumptech.glide.Resource
;
import
com.bumptech.glide.load.Key
;
import
com.bumptech.glide.load.ResourceDecoder
;
...
...
@@ -18,6 +18,7 @@ import java.io.InputStream;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Future
;
import
static
junit
.
framework
.
Assert
.
assertEquals
;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Matchers
.
anyBoolean
;
import
static
org
.
mockito
.
Matchers
.
anyInt
;
...
...
@@ -46,7 +47,7 @@ public class ResourceRunnerTest {
harness
.
runner
.
run
();
verify
(
harness
.
s
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
verify
(
harness
.
resizeS
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
}
@Test
...
...
@@ -166,7 +167,7 @@ public class ResourceRunnerTest {
harness
.
runner
.
run
();
verify
(
harness
.
s
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
verify
(
harness
.
resizeS
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
}
@Test
...
...
@@ -176,7 +177,7 @@ public class ResourceRunnerTest {
harness
.
runner
.
run
();
verify
(
harness
.
s
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
verify
(
harness
.
resizeS
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
}
@Test
...
...
@@ -186,22 +187,24 @@ public class ResourceRunnerTest {
harness
.
runner
.
run
();
verify
(
harness
.
s
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
verify
(
harness
.
resizeS
ervice
).
submit
(
eq
(
harness
.
sourceRunner
));
}
@Test
public
void
testPostedTo
BackgroundHandler
WhenQueued
()
{
public
void
testPostedTo
DiskCacheSercice
WhenQueued
()
{
harness
.
runner
.
queue
();
verify
(
harness
.
bgHandler
).
pos
t
(
eq
(
harness
.
runner
));
verify
(
harness
.
diskCacheService
).
submi
t
(
eq
(
harness
.
runner
));
}
@Test
public
void
testRemovedFromBackgroundHandlerWhenCancelled
()
{
public
void
testCancelsFutureFromDiskCacheServiceWhenCancelledIfNotYetQueuedToResizeService
()
{
Future
future
=
mock
(
Future
.
class
);
when
(
harness
.
diskCacheService
.
submit
(
eq
(
harness
.
runner
))).
thenReturn
(
future
);
harness
.
runner
.
queue
();
harness
.
runner
.
cancel
();
verify
(
harness
.
bgHandler
).
removeCallbacks
(
eq
(
harness
.
runner
));
verify
(
future
).
cancel
(
eq
(
false
));
}
@Test
...
...
@@ -257,6 +260,11 @@ public class ResourceRunnerTest {
verify
(
harness
.
decoded
,
never
()).
recycle
();
}
@Test
public
void
testReturnsGivenPriority
()
{
assertEquals
(
harness
.
priority
.
ordinal
(),
harness
.
runner
.
getPriority
());
}
@SuppressWarnings
(
"unchecked"
)
private
static
class
ResourceRunnerHarness
{
Key
key
=
mock
(
Key
.
class
);
...
...
@@ -264,14 +272,15 @@ public class ResourceRunnerTest {
ResourceDecoder
<
Object
,
Object
>
decoder
=
mock
(
ResourceDecoder
.
class
);
SourceResourceRunner
<
Object
,
Object
,
Object
>
sourceRunner
=
mock
(
SourceResourceRunner
.
class
);
ResourceTranscoder
<
Object
,
Object
>
transcoder
=
mock
(
ResourceTranscoder
.
class
);
ExecutorService
service
=
mock
(
ExecutorService
.
class
);
ExecutorService
resizeService
=
mock
(
ExecutorService
.
class
);
ExecutorService
diskCacheService
=
mock
(
ExecutorService
.
class
);
EngineJob
engineJob
=
mock
(
EngineJob
.
class
);
Handler
bgHandler
=
mock
(
Handler
.
class
);
Transformation
<
Object
>
tranformation
=
mock
(
Transformation
.
class
);
int
width
=
100
;
int
height
=
100
;
Priority
priority
=
Priority
.
HIGH
;
ResourceRunner
<
Object
,
Object
>
runner
=
new
ResourceRunner
(
key
,
width
,
height
,
diskCache
,
decoder
,
tranformation
,
transcoder
,
sourceRunner
,
service
,
bgHandler
,
engineJob
);
tranformation
,
transcoder
,
sourceRunner
,
diskCacheService
,
resizeService
,
engineJob
,
priority
);
Future
future
=
mock
(
Future
.
class
);
Future
sourceFuture
=
mock
(
Future
.
class
);
Resource
<
Object
>
decoded
=
mock
(
Resource
.
class
);
...
...
@@ -280,8 +289,8 @@ public class ResourceRunnerTest {
public
ResourceRunnerHarness
()
{
when
(
key
.
toString
()).
thenReturn
(
ID
);
when
(
s
ervice
.
submit
(
eq
(
runner
))).
thenReturn
(
future
);
when
(
s
ervice
.
submit
(
eq
(
sourceRunner
))).
thenReturn
(
sourceFuture
);
when
(
resizeS
ervice
.
submit
(
eq
(
runner
))).
thenReturn
(
future
);
when
(
resizeS
ervice
.
submit
(
eq
(
sourceRunner
))).
thenReturn
(
sourceFuture
);
}
}
}
library/src/test/java/com/bumptech/glide/request/ThumbnailRequestCoordinatorTest.java
浏览文件 @
cecec2be
...
...
@@ -57,14 +57,6 @@ public class ThumbnailRequestCoordinatorTest {
verify
(
thumb
).
run
();
}
@Test
public
void
testDoesNotStartThumbOnRunIfFullCompletesSynchronously
()
{
when
(
full
.
isComplete
()).
thenReturn
(
true
);
coordinator
.
run
();
verify
(
thumb
,
never
()).
run
();
}
@Test
public
void
testDoesNotStartFullOnRunIfRunning
()
{
when
(
full
.
isRunning
()).
thenReturn
(
true
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录