Ticket #2288 (closed bug: obsolete)
general-performance
Reported by: | kyli | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | uncategorized | Version: | 2.0 |
Keywords: | Cc: | ||
Category: | unknown | Effort: | |
Importance: | Ticket_group: | ||
Estimated Number of Hours: | 0 | Add Hours to Ticket: | 0 |
Billable?: | yes | Total Hours: | 0 |
Analysis_owners: | kyli | Design_owners: | kyli |
Imp._owners: | kyli | Test_owners: | |
Analysis_reviewers: | pap | Changelog: | |
Design_reviewers: | pap | Imp._reviewers: | pap, todor |
Test_reviewers: | Analysis_score: | 3 | |
Design_score: | 3.5 | Imp._score: | 4 |
Test_score: | 0 |
Description (last modified by pap) (diff)
Locate and fix various problems, related to overall Sophie2 performance:
- The startup should be optimized;
- Calls of BaseVisualElement.findNearestElement() should be limited, since it is quite slow method;
- Skinning should be inspected for possible slow-downs;
- ProLib updates are currently too much, try to minimize them.
Change History
comment:2 Changed 15 years ago by kyli
- Design_owners set to kyli
- Status changed from s1b_analysis_finished to s2a_design_started
comment:3 Changed 15 years ago by kyli
- Status changed from s2a_design_started to s3b_implementation_finished
- Imp._owners set to kyli
Design
- The most important requirement of this task is to make true startup faster. In AuthorModule, the runnable should not wait 15 seconds before startup. Instead, it will wait second by second until the BaseVisualModule recognizes a registered layout engine.
- In the Skin class, the methods getvalue() and getValues() use same code for doing similar things. The dependencies from registered extensions could be reduced by using auto props - one for all the extensions, and one for their records. I could not determine the exact performance effect from this change, so I cannot decide how useful this is.
- Calls of findNearestElement which are totally useless:
- BookView.addPage();
- EmbeddedBooksPalette.openBooksPalette();
- ConnectionsPalette.initAccounts() - use findParentElement instead.
- Also, ResourceDetailsPalette and PluginsAboutPalette use findNearestElement. Make a method getPalette(Class<? extends Palette>) in Tab. Then in these palettes, use getParent().getPalette(..). This can be achieved, because we know the needed palettes are in the same tab.
- In ProListener add a method getSize(), which gives the count of the listened pro's. The listener in AutoTracker will return getListened().size(), all the other listener implementations could return 0 - their value is ignored.
- BasePro.fireChanged(): Before calling changed() to all the listeners, put them in a set of listeners. If the listener is already there, do not call its changed() - obviously, another pro will call it later. The listeners should be notified in ascending order of their size - the more props it listens to, the later it will be notified. After performing all changed() methods, remove the listeners from the set. This patch seems to save up to 5% of the prop updates in some specific cases.
- In HaloMenu, a prop which computes the currently visible bounds should be added. It can be used in AppMainWindow.haloSync, which causes less updates and less repaints.
Implementation
- The implementation is done according the design in branches/private/kyli/2288.
- In addidion to the task, I removed some AutoProps from the appearance hud. I doubt they have some performance effect, but they were so ugly :)
comment:5 Changed 15 years ago by pap
- Status changed from s3b_implementation_finished to s3c_implementation_ok
- Analysis_reviewers set to pap
- Analysis_score changed from 0 to 3
- Imp._reviewers set to pap, todor
- Design_score changed from 0 to 3.5
- Design_reviewers set to pap
- Imp._score changed from 0 to 4
- Commited in [8615]
- The unnecessary override of the parent property in AllResourcesPalette - we talked about that
- Most of the things look quite nice as code. I like deleting unnecessary code.
- Visibility of swings may be synchronized in BaseSwingVisualElement and not in BoundControl - you already saw that.
Note: See
TracTickets for help on using
tickets.
Locate and fix various problems, related to overall Sophie2 performance: