Closed
Bug 1047819
Opened 9 years ago
Closed 6 years ago
make an async getAnnotationsForItem and deprecate the synchronous one
Categories
(Toolkit :: Places, defect, P2)
Toolkit
Places
Tracking
()
RESOLVED
FIXED
mozilla61
Tracking | Status | |
---|---|---|
firefox61 | --- | fixed |
People
(Reporter: mak, Assigned: standard8)
References
(Blocks 2 open bugs)
Details
(Keywords: perf, Whiteboard: [fxperf][fxsearch])
Attachments
(4 files)
we need an async version of getAnnotationsForItem and remove the synchronous version.
Reporter | ||
Updated•8 years ago
|
Priority: -- → P3
Reporter | ||
Updated•7 years ago
|
Depends on: PlacesAsyncTransact
Reporter | ||
Updated•6 years ago
|
Priority: P3 → P2
Reporter | ||
Updated•6 years ago
|
No longer depends on: PlacesAsyncTransact
Reporter | ||
Comment 1•6 years ago
|
||
This seems to be a common cause of long janks on arewesmoothyet.com I'm not sure we can completely remove the sync APIs due to D&D code, but we can probably provide an async alternative at least, for all the code points that can use it.
Whiteboard: [fxperf]
Reporter | ||
Updated•6 years ago
|
Whiteboard: [fxperf] → [fxperf][fxsearch]
Assignee | ||
Updated•6 years ago
|
Assignee: nobody → standard8
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Assignee | ||
Comment 6•6 years ago
|
||
I think we could go further on the sync version of getAnnotationsForItem to improve performance better by merging the two calls within it. Since I've just found bug 1047820, I think we can take it further there.
Reporter | ||
Comment 7•6 years ago
|
||
mozreview-review |
Comment on attachment 8963522 [details] Bug 1047819 - Add a basic test for PlacesUtils.getAnnotationsForItem. https://reviewboard.mozilla.org/r/232460/#review237896
Attachment #8963522 -
Flags: review?(mak77) → review+
Reporter | ||
Comment 8•6 years ago
|
||
mozreview-review |
Comment on attachment 8963523 [details] Bug 1047819 - Add an extra parameter to nsIAnnotationService.getItemAnnotationInfo to avoid an extra sync database lookup in PlacesUtils.getAnnotationsForItem. https://reviewboard.mozilla.org/r/232462/#review237900 I suspect the original shape was due to the presence of binary annotations, for which you likely didn't want to fetch the value, plus the variant complication. But this is a fine interim change while we move on with removing useless annos. ::: toolkit/components/places/nsAnnotationService.cpp:995 (Diff revision 1) > > > NS_IMETHODIMP > nsAnnotationService::GetItemAnnotationInfo(int64_t aItemId, > const nsACString& aName, > + nsIVariant** aValue, nit: usually per xpcom convention output pointers use _lowerCamelCase instead of aCamelCase
Attachment #8963523 -
Flags: review?(mak77) → review+
Reporter | ||
Comment 9•6 years ago
|
||
mozreview-review |
Comment on attachment 8963524 [details] Bug 1047819 - Add an async version of PlacesUtils.getAnnotationsForItem. https://reviewboard.mozilla.org/r/232464/#review237908 ::: toolkit/components/places/PlacesUtils.jsm:106 (Diff revision 1) > + * @param aItemId > + * The identifier of the itme for which annotations are to be > + * retrieved. > + * @return Array of objects, each containing the following properties: > + * name, flags, expires, mimeType, type, value > + */ Let's add a @note that one should instead use the async version unless there's absolutely no way to make the caller async. ::: toolkit/components/places/PlacesUtils.jsm:107 (Diff revision 1) > + * The identifier of the itme for which annotations are to be > + * retrieved. > + * @return Array of objects, each containing the following properties: > + * name, flags, expires, mimeType, type, value > + */ > +function getAnnotationsForItem(aItemId) { Oh, I love that this is no more exposed! ::: toolkit/components/places/PlacesUtils.jsm:110 (Diff revision 1) > + * name, flags, expires, mimeType, type, value > + */ > +function getAnnotationsForItem(aItemId) { > + var annos = []; > + var annoNames = PlacesUtils.annotations.getItemAnnotationNames(aItemId); > + for (var i = 0; i < annoNames.length; i++) { can use for...of ::: toolkit/components/places/PlacesUtils.jsm:1214 (Diff revision 1) > * @return Array of objects, each containing the following properties: > * name, flags, expires, mimeType, type, value > */ > - getAnnotationsForItem: function PU_getAnnotationsForItem(aItemId) { > - var annosvc = this.annotations; > - var annos = []; > + async promiseAnnotationsForItem(aItemId) { > + let db = await PlacesUtils.promiseDBConnection(); > + let rows = await db.execute( executeCached ::: toolkit/components/places/PlacesUtils.jsm:1217 (Diff revision 1) > - getAnnotationsForItem: function PU_getAnnotationsForItem(aItemId) { > - var annosvc = this.annotations; > - var annos = []; > - var annoNames = annosvc.getItemAnnotationNames(aItemId); > - for (var i = 0; i < annoNames.length; i++) { > - let value = {}, flags = {}, exp = {}, storageType = {}; > + async promiseAnnotationsForItem(aItemId) { > + let db = await PlacesUtils.promiseDBConnection(); > + let rows = await db.execute( > + `SELECT n.name, a.content, a.expiration, a.flags > + FROM moz_anno_attributes n > + JOIN moz_items_annos a ON a.anno_attribute_id = n.id nit: It doesn't matter in practice, but I'd probably invert the from and join tables, since logically what we are trying to select are single annos, not attributes ::: toolkit/components/places/PlacesUtils.jsm:1219 (Diff revision 1) > - var annos = []; > - var annoNames = annosvc.getItemAnnotationNames(aItemId); > - for (var i = 0; i < annoNames.length; i++) { > - let value = {}, flags = {}, exp = {}, storageType = {}; > - annosvc.getItemAnnotationInfo(aItemId, annoNames[i], value, flags, exp, storageType); > - annos.push({name: annoNames[i], > + let rows = await db.execute( > + `SELECT n.name, a.content, a.expiration, a.flags > + FROM moz_anno_attributes n > + JOIN moz_items_annos a ON a.anno_attribute_id = n.id > + WHERE a.item_id = :item_id > + `, { item_id: aItemId }); just name both the argument and the param "itemId" and make this a shorthand
Attachment #8963524 -
Flags: review?(mak77) → review+
Reporter | ||
Comment 10•6 years ago
|
||
mozreview-review |
Comment on attachment 8963525 [details] Bug 1047819 - Remove unused nsIAnnotationService::copyPageAnnotations/copyItemAnnotations. https://reviewboard.mozilla.org/r/232466/#review237918
Attachment #8963525 -
Flags: review?(mak77) → review+
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment 14•6 years ago
|
||
Pushed by mbanner@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/b2b99ec4dca6 Add a basic test for PlacesUtils.getAnnotationsForItem. r=mak https://hg.mozilla.org/integration/autoland/rev/cb8cbe3c000f Add an extra parameter to nsIAnnotationService.getItemAnnotationInfo to avoid an extra sync database lookup in PlacesUtils.getAnnotationsForItem. r=mak https://hg.mozilla.org/integration/autoland/rev/6bc3bc48fc87 Add an async version of PlacesUtils.getAnnotationsForItem. r=mak https://hg.mozilla.org/integration/autoland/rev/729748e603e5 Remove unused nsIAnnotationService::copyPageAnnotations/copyItemAnnotations. r=mak
Comment 15•6 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/b2b99ec4dca6 https://hg.mozilla.org/mozilla-central/rev/cb8cbe3c000f https://hg.mozilla.org/mozilla-central/rev/6bc3bc48fc87 https://hg.mozilla.org/mozilla-central/rev/729748e603e5
Status: NEW → RESOLVED
Closed: 6 years ago
status-firefox61:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla61
You need to log in
before you can comment on or make changes to this bug.
Description
•