summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShan Huang <shanh@google.com>2021-08-18 00:56:08 +0000
committerShan Huang <shanh@google.com>2021-08-19 18:50:25 +0000
commita1f7a71c2df15cef04e79f6c20f126e81b49c839 (patch)
tree07e82830ee9bd88d6def3a109c3834e6a027172c
parentf1eb5cc17a0ee4bdeaafedc43b9e97f56faac389 (diff)
Move boot color sysprop parsing to after loading zips.
Otherwise the sysprops would not be loaded yet and accessing them would return empty strings. Though unlikely, this is not 100% safe because boot color sysprops are not guaranteed to be loaded by the time zips are loaded. A TODO here is to understand boot steps and their timing implications so that we can fully avoid the race condition. Bug: 190093578 Test: adb shell setprop persist.bootanim.color(1-4), then reboot phone. Change-Id: I603da080b1732a436a10dbaca6f2be9f158124dc
-rw-r--r--cmds/bootanimation/BootAnimation.cpp47
-rw-r--r--cmds/bootanimation/BootAnimation.h1
2 files changed, 26 insertions, 22 deletions
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index fa94e6a4ace6..98e447cf996f 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -729,22 +729,6 @@ void BootAnimation::initShaders() {
glVertexAttribPointer(uvLocation, 2, GL_FLOAT, GL_FALSE, 0, quadUVs);
glEnableVertexAttribArray(uvLocation);
- if (dynamicColoringEnabled) {
- glUseProgram(mImageShader);
- SLOGI("[BootAnimation] Dynamically coloring boot animation.");
- for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) {
- float *startColor = mAnimation->startColors[i];
- float *endColor = mAnimation->endColors[i];
- glUniform4f(glGetUniformLocation(mImageShader,
- (U_START_COLOR_PREFIX + std::to_string(i)).c_str()),
- startColor[0], startColor[1], startColor[2], 1 /* alpha */);
- glUniform4f(glGetUniformLocation(mImageShader,
- (U_END_COLOR_PREFIX + std::to_string(i)).c_str()),
- endColor[0], endColor[1], endColor[2], 1 /* alpha */);
- }
- mImageColorProgressLocation = glGetUniformLocation(mImageShader, U_COLOR_PROGRESS);
- }
-
// Initialize text shader.
mTextShader = linkShader(vertexShader, textFragmentShader);
positionLocation = glGetAttribLocation(mTextShader, A_POSITION);
@@ -1180,12 +1164,6 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) {
s = ++endl;
}
- for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) {
- parseColorDecimalString(
- android::base::GetProperty("persist.bootanim.color" + std::to_string(i + 1), ""),
- animation.endColors[i], animation.startColors[i]);
- }
-
return true;
}
@@ -1362,6 +1340,10 @@ bool BootAnimation::movie() {
mTimeCheckThread->run("BootAnimation::TimeCheckThread", PRIORITY_NORMAL);
}
+ if (mAnimation != nullptr && mAnimation->dynamicColoringEnabled) {
+ initDynamicColors();
+ }
+
playAnimation(*mAnimation);
if (mTimeCheckThread != nullptr) {
@@ -1415,6 +1397,27 @@ void BootAnimation::drawTexturedQuad(float xStart, float yStart, float width, fl
sizeof(quadPositions) / sizeof(quadPositions[0]) / 2);
}
+void BootAnimation::initDynamicColors() {
+ for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) {
+ parseColorDecimalString(
+ android::base::GetProperty("persist.bootanim.color" + std::to_string(i + 1), ""),
+ mAnimation->endColors[i], mAnimation->startColors[i]);
+ }
+ glUseProgram(mImageShader);
+ SLOGI("[BootAnimation] Dynamically coloring boot animation.");
+ for (int i = 0; i < DYNAMIC_COLOR_COUNT; i++) {
+ float *startColor = mAnimation->startColors[i];
+ float *endColor = mAnimation->endColors[i];
+ glUniform4f(glGetUniformLocation(mImageShader,
+ (U_START_COLOR_PREFIX + std::to_string(i)).c_str()),
+ startColor[0], startColor[1], startColor[2], 1 /* alpha */);
+ glUniform4f(glGetUniformLocation(mImageShader,
+ (U_END_COLOR_PREFIX + std::to_string(i)).c_str()),
+ endColor[0], endColor[1], endColor[2], 1 /* alpha */);
+ }
+ mImageColorProgressLocation = glGetUniformLocation(mImageShader, U_COLOR_PROGRESS);
+}
+
bool BootAnimation::playAnimation(const Animation& animation) {
const size_t pcount = animation.parts.size();
nsecs_t frameDuration = s2ns(1) / animation.fps;
diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h
index 8bb3256543f4..0e29621f0326 100644
--- a/cmds/bootanimation/BootAnimation.h
+++ b/cmds/bootanimation/BootAnimation.h
@@ -204,6 +204,7 @@ private:
void checkExit();
void handleViewport(nsecs_t timestep);
+ void initDynamicColors();
sp<SurfaceComposerClient> mSession;
AssetManager mAssets;