{"action":"created","comment":{"url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/comments/213403871","pull_request_review_id":150231576,"id":213403871,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMzQwMzg3MQ==","diff_hunk":"@@ -356,119 +356,94 @@ struct trace_header_t {\n     uint64 timestamp;\n };\n \n+// XXX: DR should export this\n+#define INVALID_THREAD_ID 0\n+\n /**\n- * The raw2trace class converts the raw offline trace format to the format\n- * expected by analysis tools.  It requires access to the binary files for the\n- * libraries and executable that were present during tracing.\n+ * trace_converter_t is a reusable component that encapsulates raw trace conversion.\n+ *\n+ * Conversion happens from a data source abstracted by the type parameter T. We assume\n+ * trace entry records belonging to a thread follow together, however, the way such\n+ * records are obtained is left for implementers to decide. For example, all thread\n+ * records of a thread may be in the same file; or records from multiple threads  might be\n+ * interleaved accross multiple files.\n+ *\n+ * trace_converter_t expects to be derived by its type template T which should provide the\n+ * following APIs:\n+ *\n+ * <UL> <LI>const offline_entry_t *get_next_entry()\n+ *\n+ * Point to the next offline entry_t. There is no assumption of the underlying source\n+ * of the data, and trace_converter_t will not attempt to dereference past the provided\n+ * pointer.</LI>\n+ *\n+ * <LI>void unread_last_entry()\n+ *\n+ * Ensure that the next call to get_next_entry() re-reads the last value.</LI>","path":"clients/drcachesim/tracer/raw2trace.h","position":39,"original_position":39,"commit_id":"3b52a96b760b5e24bc7f9c75397a61c2ae8bcc09","original_commit_id":"a5e62bdb952ca0ec85c60551277367ad627e25dc","user":{"login":"derekbruening","id":6509618,"node_id":"MDQ6VXNlcjY1MDk2MTg=","avatar_url":"https://avatars1.githubusercontent.com/u/6509618?v=4","gravatar_id":"","url":"https://api.github.com/users/derekbruening","html_url":"https://github.com/derekbruening","followers_url":"https://api.github.com/users/derekbruening/followers","following_url":"https://api.github.com/users/derekbruening/following{/other_user}","gists_url":"https://api.github.com/users/derekbruening/gists{/gist_id}","starred_url":"https://api.github.com/users/derekbruening/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/derekbruening/subscriptions","organizations_url":"https://api.github.com/users/derekbruening/orgs","repos_url":"https://api.github.com/users/derekbruening/repos","events_url":"https://api.github.com/users/derekbruening/events{/privacy}","received_events_url":"https://api.github.com/users/derekbruening/received_events","type":"User","site_admin":false},"body":"To do what my prior comments are trying to say would require putting these comments under the raw2trace_t implementation, which would require `raw2trace_t::` in front of them all here to get a link: I don't think there's cleaner way.  Seems ok to leave it as is.","created_at":"2018-08-28T17:27:48Z","updated_at":"2018-08-28T17:27:55Z","html_url":"https://github.com/DynamoRIO/dynamorio/pull/3149#discussion_r213403871","pull_request_url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/comments/213403871"},"html":{"href":"https://github.com/DynamoRIO/dynamorio/pull/3149#discussion_r213403871"},"pull_request":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149"}},"in_reply_to_id":213172803},"pull_request":{"url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149","id":211181506,"node_id":"MDExOlB1bGxSZXF1ZXN0MjExMTgxNTA2","html_url":"https://github.com/DynamoRIO/dynamorio/pull/3149","diff_url":"https://github.com/DynamoRIO/dynamorio/pull/3149.diff","patch_url":"https://github.com/DynamoRIO/dynamorio/pull/3149.patch","issue_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/3149","number":3149,"state":"open","locked":false,"title":"i#3129 raw2trace perf: factored trace_converter_t out of raw2trace_t","user":{"login":"mtrofin","id":3815402,"node_id":"MDQ6VXNlcjM4MTU0MDI=","avatar_url":"https://avatars2.githubusercontent.com/u/3815402?v=4","gravatar_id":"","url":"https://api.github.com/users/mtrofin","html_url":"https://github.com/mtrofin","followers_url":"https://api.github.com/users/mtrofin/followers","following_url":"https://api.github.com/users/mtrofin/following{/other_user}","gists_url":"https://api.github.com/users/mtrofin/gists{/gist_id}","starred_url":"https://api.github.com/users/mtrofin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mtrofin/subscriptions","organizations_url":"https://api.github.com/users/mtrofin/orgs","repos_url":"https://api.github.com/users/mtrofin/repos","events_url":"https://api.github.com/users/mtrofin/events{/privacy}","received_events_url":"https://api.github.com/users/mtrofin/received_events","type":"User","site_admin":false},"body":"Introducing trace_converter_t, a template factoring out of raw2trace_t the functionality necessary for building custom trace converters.\r\n\r\nIssue #3129","created_at":"2018-08-27T17:52:08Z","updated_at":"2018-08-28T17:27:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"410eb4dc8fcb9055692a1faa99911d81db701280","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149/commits","review_comments_url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149/comments","review_comment_url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/3149/comments","statuses_url":"https://api.github.com/repos/DynamoRIO/dynamorio/statuses/3b52a96b760b5e24bc7f9c75397a61c2ae8bcc09","head":{"label":"DynamoRIO:i3129-introduce-template","ref":"i3129-introduce-template","sha":"3b52a96b760b5e24bc7f9c75397a61c2ae8bcc09","user":{"login":"DynamoRIO","id":9010155,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwMTAxNTU=","avatar_url":"https://avatars2.githubusercontent.com/u/9010155?v=4","gravatar_id":"","url":"https://api.github.com/users/DynamoRIO","html_url":"https://github.com/DynamoRIO","followers_url":"https://api.github.com/users/DynamoRIO/followers","following_url":"https://api.github.com/users/DynamoRIO/following{/other_user}","gists_url":"https://api.github.com/users/DynamoRIO/gists{/gist_id}","starred_url":"https://api.github.com/users/DynamoRIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DynamoRIO/subscriptions","organizations_url":"https://api.github.com/users/DynamoRIO/orgs","repos_url":"https://api.github.com/users/DynamoRIO/repos","events_url":"https://api.github.com/users/DynamoRIO/events{/privacy}","received_events_url":"https://api.github.com/users/DynamoRIO/received_events","type":"Organization","site_admin":false},"repo":{"id":27242935,"node_id":"MDEwOlJlcG9zaXRvcnkyNzI0MjkzNQ==","name":"dynamorio","full_name":"DynamoRIO/dynamorio","owner":{"login":"DynamoRIO","id":9010155,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwMTAxNTU=","avatar_url":"https://avatars2.githubusercontent.com/u/9010155?v=4","gravatar_id":"","url":"https://api.github.com/users/DynamoRIO","html_url":"https://github.com/DynamoRIO","followers_url":"https://api.github.com/users/DynamoRIO/followers","following_url":"https://api.github.com/users/DynamoRIO/following{/other_user}","gists_url":"https://api.github.com/users/DynamoRIO/gists{/gist_id}","starred_url":"https://api.github.com/users/DynamoRIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DynamoRIO/subscriptions","organizations_url":"https://api.github.com/users/DynamoRIO/orgs","repos_url":"https://api.github.com/users/DynamoRIO/repos","events_url":"https://api.github.com/users/DynamoRIO/events{/privacy}","received_events_url":"https://api.github.com/users/DynamoRIO/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DynamoRIO/dynamorio","description":"Dynamic Instrumentation Tool Platform","fork":false,"url":"https://api.github.com/repos/DynamoRIO/dynamorio","forks_url":"https://api.github.com/repos/DynamoRIO/dynamorio/forks","keys_url":"https://api.github.com/repos/DynamoRIO/dynamorio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DynamoRIO/dynamorio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DynamoRIO/dynamorio/teams","hooks_url":"https://api.github.com/repos/DynamoRIO/dynamorio/hooks","issue_events_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/events{/number}","events_url":"https://api.github.com/repos/DynamoRIO/dynamorio/events","assignees_url":"https://api.github.com/repos/DynamoRIO/dynamorio/assignees{/user}","branches_url":"https://api.github.com/repos/DynamoRIO/dynamorio/branches{/branch}","tags_url":"https://api.github.com/repos/DynamoRIO/dynamorio/tags","blobs_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/refs{/sha}","trees_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DynamoRIO/dynamorio/statuses/{sha}","languages_url":"https://api.github.com/repos/DynamoRIO/dynamorio/languages","stargazers_url":"https://api.github.com/repos/DynamoRIO/dynamorio/stargazers","contributors_url":"https://api.github.com/repos/DynamoRIO/dynamorio/contributors","subscribers_url":"https://api.github.com/repos/DynamoRIO/dynamorio/subscribers","subscription_url":"https://api.github.com/repos/DynamoRIO/dynamorio/subscription","commits_url":"https://api.github.com/repos/DynamoRIO/dynamorio/commits{/sha}","git_commits_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/commits{/sha}","comments_url":"https://api.github.com/repos/DynamoRIO/dynamorio/comments{/number}","issue_comment_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/comments{/number}","contents_url":"https://api.github.com/repos/DynamoRIO/dynamorio/contents/{+path}","compare_url":"https://api.github.com/repos/DynamoRIO/dynamorio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DynamoRIO/dynamorio/merges","archive_url":"https://api.github.com/repos/DynamoRIO/dynamorio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DynamoRIO/dynamorio/downloads","issues_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues{/number}","pulls_url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls{/number}","milestones_url":"https://api.github.com/repos/DynamoRIO/dynamorio/milestones{/number}","notifications_url":"https://api.github.com/repos/DynamoRIO/dynamorio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DynamoRIO/dynamorio/labels{/name}","releases_url":"https://api.github.com/repos/DynamoRIO/dynamorio/releases{/id}","deployments_url":"https://api.github.com/repos/DynamoRIO/dynamorio/deployments","created_at":"2014-11-27T22:08:34Z","updated_at":"2018-08-28T10:34:06Z","pushed_at":"2018-08-28T15:28:52Z","git_url":"git://github.com/DynamoRIO/dynamorio.git","ssh_url":"git@github.com:DynamoRIO/dynamorio.git","clone_url":"https://github.com/DynamoRIO/dynamorio.git","svn_url":"https://github.com/DynamoRIO/dynamorio","homepage":null,"size":47844,"stargazers_count":712,"watchers_count":712,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":206,"mirror_url":null,"archived":false,"open_issues_count":1043,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":206,"open_issues":1043,"watchers":712,"default_branch":"master"}},"base":{"label":"DynamoRIO:master","ref":"master","sha":"35e0316964bcfc3c1371d23024da7e9226ca221b","user":{"login":"DynamoRIO","id":9010155,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwMTAxNTU=","avatar_url":"https://avatars2.githubusercontent.com/u/9010155?v=4","gravatar_id":"","url":"https://api.github.com/users/DynamoRIO","html_url":"https://github.com/DynamoRIO","followers_url":"https://api.github.com/users/DynamoRIO/followers","following_url":"https://api.github.com/users/DynamoRIO/following{/other_user}","gists_url":"https://api.github.com/users/DynamoRIO/gists{/gist_id}","starred_url":"https://api.github.com/users/DynamoRIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DynamoRIO/subscriptions","organizations_url":"https://api.github.com/users/DynamoRIO/orgs","repos_url":"https://api.github.com/users/DynamoRIO/repos","events_url":"https://api.github.com/users/DynamoRIO/events{/privacy}","received_events_url":"https://api.github.com/users/DynamoRIO/received_events","type":"Organization","site_admin":false},"repo":{"id":27242935,"node_id":"MDEwOlJlcG9zaXRvcnkyNzI0MjkzNQ==","name":"dynamorio","full_name":"DynamoRIO/dynamorio","owner":{"login":"DynamoRIO","id":9010155,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkwMTAxNTU=","avatar_url":"https://avatars2.githubusercontent.com/u/9010155?v=4","gravatar_id":"","url":"https://api.github.com/users/DynamoRIO","html_url":"https://github.com/DynamoRIO","followers_url":"https://api.github.com/users/DynamoRIO/followers","following_url":"https://api.github.com/users/DynamoRIO/following{/other_user}","gists_url":"https://api.github.com/users/DynamoRIO/gists{/gist_id}","starred_url":"https://api.github.com/users/DynamoRIO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DynamoRIO/subscriptions","organizations_url":"https://api.github.com/users/DynamoRIO/orgs","repos_url":"https://api.github.com/users/DynamoRIO/repos","events_url":"https://api.github.com/users/DynamoRIO/events{/privacy}","received_events_url":"https://api.github.com/users/DynamoRIO/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DynamoRIO/dynamorio","description":"Dynamic Instrumentation Tool Platform","fork":false,"url":"https://api.github.com/repos/DynamoRIO/dynamorio","forks_url":"https://api.github.com/repos/DynamoRIO/dynamorio/forks","keys_url":"https://api.github.com/repos/DynamoRIO/dynamorio/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DynamoRIO/dynamorio/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DynamoRIO/dynamorio/teams","hooks_url":"https://api.github.com/repos/DynamoRIO/dynamorio/hooks","issue_events_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/events{/number}","events_url":"https://api.github.com/repos/DynamoRIO/dynamorio/events","assignees_url":"https://api.github.com/repos/DynamoRIO/dynamorio/assignees{/user}","branches_url":"https://api.github.com/repos/DynamoRIO/dynamorio/branches{/branch}","tags_url":"https://api.github.com/repos/DynamoRIO/dynamorio/tags","blobs_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/refs{/sha}","trees_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DynamoRIO/dynamorio/statuses/{sha}","languages_url":"https://api.github.com/repos/DynamoRIO/dynamorio/languages","stargazers_url":"https://api.github.com/repos/DynamoRIO/dynamorio/stargazers","contributors_url":"https://api.github.com/repos/DynamoRIO/dynamorio/contributors","subscribers_url":"https://api.github.com/repos/DynamoRIO/dynamorio/subscribers","subscription_url":"https://api.github.com/repos/DynamoRIO/dynamorio/subscription","commits_url":"https://api.github.com/repos/DynamoRIO/dynamorio/commits{/sha}","git_commits_url":"https://api.github.com/repos/DynamoRIO/dynamorio/git/commits{/sha}","comments_url":"https://api.github.com/repos/DynamoRIO/dynamorio/comments{/number}","issue_comment_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/comments{/number}","contents_url":"https://api.github.com/repos/DynamoRIO/dynamorio/contents/{+path}","compare_url":"https://api.github.com/repos/DynamoRIO/dynamorio/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DynamoRIO/dynamorio/merges","archive_url":"https://api.github.com/repos/DynamoRIO/dynamorio/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DynamoRIO/dynamorio/downloads","issues_url":"https://api.github.com/repos/DynamoRIO/dynamorio/issues{/number}","pulls_url":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls{/number}","milestones_url":"https://api.github.com/repos/DynamoRIO/dynamorio/milestones{/number}","notifications_url":"https://api.github.com/repos/DynamoRIO/dynamorio/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DynamoRIO/dynamorio/labels{/name}","releases_url":"https://api.github.com/repos/DynamoRIO/dynamorio/releases{/id}","deployments_url":"https://api.github.com/repos/DynamoRIO/dynamorio/deployments","created_at":"2014-11-27T22:08:34Z","updated_at":"2018-08-28T10:34:06Z","pushed_at":"2018-08-28T15:28:52Z","git_url":"git://github.com/DynamoRIO/dynamorio.git","ssh_url":"git@github.com:DynamoRIO/dynamorio.git","clone_url":"https://github.com/DynamoRIO/dynamorio.git","svn_url":"https://github.com/DynamoRIO/dynamorio","homepage":null,"size":47844,"stargazers_count":712,"watchers_count":712,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":206,"mirror_url":null,"archived":false,"open_issues_count":1043,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":206,"open_issues":1043,"watchers":712,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149"},"html":{"href":"https://github.com/DynamoRIO/dynamorio/pull/3149"},"issue":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/3149"},"comments":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/issues/3149/comments"},"review_comments":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149/comments"},"review_comment":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/pulls/3149/commits"},"statuses":{"href":"https://api.github.com/repos/DynamoRIO/dynamorio/statuses/3b52a96b760b5e24bc7f9c75397a61c2ae8bcc09"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"derekbruening"}}