1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2024-12-23 16:40:32 +00:00

Merge pull request #4080 from avently/cpu-usage-improvement

Reduced CPU usage when playing a video by 7-10%
This commit is contained in:
wb9688 2020-08-17 09:46:07 +02:00 committed by GitHub
commit b7f50c3e12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -202,6 +202,7 @@ public class VideoDetailFragment
private ImageView thumbnailImageView; private ImageView thumbnailImageView;
private ImageView thumbnailPlayButton; private ImageView thumbnailPlayButton;
private AnimatedProgressBar positionView; private AnimatedProgressBar positionView;
private ViewGroup playerPlaceholder;
private View videoTitleRoot; private View videoTitleRoot;
private TextView videoTitleTextView; private TextView videoTitleTextView;
@ -705,6 +706,7 @@ public class VideoDetailFragment
thumbnailBackgroundButton = rootView.findViewById(R.id.detail_thumbnail_root_layout); thumbnailBackgroundButton = rootView.findViewById(R.id.detail_thumbnail_root_layout);
thumbnailImageView = rootView.findViewById(R.id.detail_thumbnail_image_view); thumbnailImageView = rootView.findViewById(R.id.detail_thumbnail_image_view);
thumbnailPlayButton = rootView.findViewById(R.id.detail_thumbnail_play_button); thumbnailPlayButton = rootView.findViewById(R.id.detail_thumbnail_play_button);
playerPlaceholder = rootView.findViewById(R.id.player_placeholder);
contentRootLayoutHiding = rootView.findViewById(R.id.detail_content_root_hiding); contentRootLayoutHiding = rootView.findViewById(R.id.detail_content_root_hiding);
@ -1265,17 +1267,15 @@ public class VideoDetailFragment
return; return;
} }
final FrameLayout viewHolder = getView().findViewById(R.id.player_placeholder);
// Check if viewHolder already contains a child // Check if viewHolder already contains a child
if (player.getRootView().getParent() != viewHolder) { if (player.getRootView().getParent() != playerPlaceholder) {
removeVideoPlayerView(); removeVideoPlayerView();
} }
setHeightThumbnail(); setHeightThumbnail();
// Prevent from re-adding a view multiple times // Prevent from re-adding a view multiple times
if (player.getRootView().getParent() == null) { if (player.getRootView().getParent() == null) {
viewHolder.addView(player.getRootView()); playerPlaceholder.addView(player.getRootView());
} }
} }
@ -1290,9 +1290,8 @@ public class VideoDetailFragment
return; return;
} }
final FrameLayout viewHolder = getView().findViewById(R.id.player_placeholder); playerPlaceholder.getLayoutParams().height = FrameLayout.LayoutParams.MATCH_PARENT;
viewHolder.getLayoutParams().height = FrameLayout.LayoutParams.MATCH_PARENT; playerPlaceholder.requestLayout();
viewHolder.requestLayout();
} }
private void prepareDescription(final Description description) { private void prepareDescription(final Description description) {
@ -1770,9 +1769,19 @@ public class VideoDetailFragment
private void showPlaybackProgress(final long progress, final long duration) { private void showPlaybackProgress(final long progress, final long duration) {
final int progressSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(progress); final int progressSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(progress);
final int durationSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(duration); final int durationSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(duration);
// If the old and the new progress values have a big difference then use
// animation. Otherwise don't because it affects CPU
final boolean shouldAnimate = Math.abs(positionView.getProgress() - progressSeconds) > 2;
positionView.setMax(durationSeconds); positionView.setMax(durationSeconds);
positionView.setProgressAnimated(progressSeconds); if (shouldAnimate) {
detailPositionView.setText(Localization.getDurationString(progressSeconds)); positionView.setProgressAnimated(progressSeconds);
} else {
positionView.setProgress(progressSeconds);
}
final String position = Localization.getDurationString(progressSeconds);
if (position != detailPositionView.getText()) {
detailPositionView.setText(position);
}
if (positionView.getVisibility() != View.VISIBLE) { if (positionView.getVisibility() != View.VISIBLE) {
animateView(positionView, true, 100); animateView(positionView, true, 100);
animateView(detailPositionView, true, 100); animateView(detailPositionView, true, 100);
@ -1949,7 +1958,7 @@ public class VideoDetailFragment
(CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
final AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); final AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
final ValueAnimator valueAnimator = ValueAnimator final ValueAnimator valueAnimator = ValueAnimator
.ofInt(0, -getView().findViewById(R.id.player_placeholder).getHeight()); .ofInt(0, -playerPlaceholder.getHeight());
valueAnimator.setInterpolator(new DecelerateInterpolator()); valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(animation -> { valueAnimator.addUpdateListener(animation -> {
behavior.setTopAndBottomOffset((int) animation.getAnimatedValue()); behavior.setTopAndBottomOffset((int) animation.getAnimatedValue());