Skip to content

Conversation

@cn0809
Copy link
Collaborator

@cn0809 cn0809 commented Feb 2, 2026

update: #2759

Move estimated run duration to Task according to comment: #2778 (comment)

@gemini-code-assist
Copy link

Summary of Changes

Hello @cn0809, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request refactors the architecture for tracking and displaying the estimated remaining time of asynchronous generation processes within the application. By shifting the responsibility for time management from generic Phase objects to specific Task objects, the system gains better encapsulation and clearer separation of concerns. This change streamlines how progress is communicated to the user and improves resource cleanup for long-running operations, directly addressing feedback from a previous discussion.

Highlights

  • Refactored Remaining Time Logic: The responsibility for calculating and updating the estimated remaining time for asynchronous operations has been moved from Phase objects to Task objects, centralizing this logic.
  • Simplified Phase Class: The Phase class no longer manages its own internal timer or estimated runDuration, making it a more generic state tracker for process stages.
  • Enhanced Task Class: The Task class now encapsulates the logic for estimating its own runDuration, managing an internal timer, and providing a callback mechanism (setOnRemainingUpdated) to notify other components (like Phase instances) of remaining time updates.
  • Improved Resource Management: Disposers have been added to AnimationGen, CostumeGen, and SpriteGen classes to ensure that Task instances are properly cleaned up when no longer needed, preventing potential memory leaks.
  • Centralized Task Durations: Estimated durations for different TaskTypes are now defined in a single taskRunDuration constant within common.ts, improving maintainability and consistency.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the remaining time update logic, moving it from the Phase class to the Task class. This is a good architectural improvement, as the Task class is more closely related to the underlying asynchronous operations and their progress.

The changes are well-implemented:

  • The timer logic has been cleanly removed from Phase and added to Task.
  • A callback mechanism (setOnRemainingUpdated) has been introduced to propagate the remaining time from Task to Phase.
  • Estimated task durations are now centralized in the taskRunDuration constant.
  • Importantly, Disposable is now used for Tasks to ensure timers are cleaned up, preventing potential resource leaks.

The implementation is consistent across all affected files. I have one minor suggestion to improve code reuse and maintainability. Overall, this is a solid refactoring.

@xgopilot
Copy link
Contributor

xgopilot bot commented Feb 2, 2026

Code Review Summary

The refactoring successfully moves remaining time tracking from Phase to Task, establishing a clean callback pattern. However, there are critical issues around timer management and error handling that should be addressed:

Critical Issues:

  • Timer resource leaks when callbacks throw exceptions
  • Race condition allowing unsafe callback modification during execution
  • Missing error handling in Task.start()
  • Vue reactivity inconsistency in Phase.updateRemainingRuntime()

Documentation Gaps:

  • Missing JSDoc for updateRemainingRuntime() and setOnRemainingUpdated()
  • New callback pattern not explained

Positive Notes:

  • Clean separation of concerns between Task and Phase
  • Proper disposal pattern maintained
  • Timer calculation logic is appropriate

Please review the inline comments for specific recommendations.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors AIGC generation progress tracking so estimated remaining-time comes from Task (by TaskType) and is passed into Phase at execution time, rather than being configured on Phase construction.

Changes:

  • Remove runDuration from Phase constructor; add optional runDuration parameter to Phase.track/Phase.run.
  • Introduce per-TaskType estimated durations and expose them via Task.runDuration.
  • Update sprite/costume/animation/backdrop generation flows to pass task duration into their “generate” phases; adjust sprite settings UI tip rendering while running.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
spx-gui/src/models/gen/common.ts Moves duration estimation to Task and makes Phase accept per-run duration for remaining-time countdown.
spx-gui/src/models/gen/sprite-gen.ts Passes genImagesTask.runDuration into the image-generation phase execution.
spx-gui/src/models/gen/costume-gen.ts Passes generateTask.runDuration into the costume-generation phase execution.
spx-gui/src/models/gen/animation-gen.ts Passes generateVideoTask.runDuration into the video-generation phase execution.
spx-gui/src/models/gen/backdrop-gen.ts Passes generateTask.runDuration into the backdrop-image generation phase execution.
spx-gui/src/components/asset/gen/sprite/SpriteGenPhaseSettings.vue Shows the running tip whenever generation is running, optionally appending remaining time if available.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@cn0809 cn0809 changed the title refactor(spx-gui): Move remaining time update logic from Phase to Task refactor(spx-gui): provide estimated run duration in Task Feb 3, 2026
@nighca nighca enabled auto-merge (squash) February 3, 2026 08:51
@nighca nighca merged commit 2b895fa into goplus:dev Feb 3, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants