{ "id": "84480", "key": "TIMOB-6990", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": { "id": "10100", "description": "This issue won't be actioned.", "name": "Won't Do" }, "resolutiondate": "2020-01-09T19:36:23.000+0000", "created": "2012-01-04T18:39:37.000+0000", "priority": { "name": "Low", "id": "4" }, "labels": [ "core" ], "versions": [ { "id": "12580", "description": "Dual Runtime 1.8.0", "name": "Release 1.8.0.1", "archived": true, "released": true, "releaseDate": "2011-12-22" }, { "id": "13271", "description": "Release 2.1.0", "name": "Release 2.1.0", "archived": false, "released": true, "releaseDate": "2012-06-29" } ], "issuelinks": [ { "id": "14828", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "63916", "key": "TIMOB-3284", "fields": { "summary": "iOS: Move KrollContext threads to NSOperations", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "17020", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "91274", "key": "TIMOB-8973", "fields": { "summary": "iOS: Locking/lock management evaluation", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "Low", "id": "4" }, "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false } } } } ], "assignee": { "name": "ahutton", "key": "ahutton", "displayName": "Alan Hutton", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2020-01-09T19:36:23.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "Just as the bug description says, we should change {{KrollContext}} to use a single GCD serial queue (or {{NSOperationQueue}}). Here's what we get from this:\r\n\r\n* Reduced complexity\r\n* Speed improvement (no more signaling/blocking/locking for events, they can just go straight into the serial queue)\r\n* Reduced chance of cross-context bugs (due to execution ordering)\r\n* The ability to call JS from the main thread! (critical for implementing the layout spec, listcontroller/tableview2, and concurrency) Note that this doesn't guarantee \"no deadlocks\" or \"no bad blocking behavior\" or even \"no crashes due to iOS main thread demands\" in the case where the JS must call methods on the main thread (as always) but we can mitigate this with GCD as well.\r\n\r\nThis essentially allows us to collapse our multiple context threads into a single thread for JSCore.\r\n\r\n*NOTE:* May need to be rescheduled depending on QE impact to avoid resets. But we do need this before work on layout or other critical 1.9.0 features begins.", "attachment": [], "flagged": false, "summary": "iOS: Change KrollContext to use a single GCD serialized queue", "creator": { "name": "stephentramer", "key": "stephentramer", "displayName": "Stephen Tramer", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "stephentramer", "key": "stephentramer", "displayName": "Stephen Tramer", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "182321", "author": { "name": "stephentramer", "key": "stephentramer", "displayName": "Stephen Tramer", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Bumping to next sprint to continue work there.", "updateAuthor": { "name": "stephentramer", "key": "stephentramer", "displayName": "Stephen Tramer", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-02-07T17:17:19.000+0000", "updated": "2012-02-07T17:17:19.000+0000" }, { "id": "244050", "author": { "name": "blainhamon", "key": "blainhamon", "displayName": "Blain Hamon", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Honestly, I'm not sure if this is the proper solution. We should look into:\n* If this actually gets us a performance boost\n* If we still can control and do proper garbage collection interleaving actions\n* Whether or not JS deadlocks will occur\n* Whether or not we could have this main logic be cross-platform; GCD closes this option\n* How compatible it is with webworkers\n\nI'm not disputing that we should revisit KrollContext. But I'm not sold that this is the solution.", "updateAuthor": { "name": "blainhamon", "key": "blainhamon", "displayName": "Blain Hamon", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-03-26T00:22:34.000+0000", "updated": "2013-03-26T00:22:34.000+0000" } ], "maxResults": 4, "total": 4, "startAt": 0 } } }