New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Add creationTime function to process #13542
Conversation
docs/api/process.md
Outdated
|
||
Returns [`number`] | ||
Indicates the creation time of the application. | ||
The time is represented as microseconds (s/1,000,000) since the Windows epoch (1601-01-01 00:00:00 UTC) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mac & linux seem to return seconds from the start of the process.
And can be null or empty if the API fails.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking at the run from Mac it is giving back time since windows epoch as well
Here is what we get when run on a Mac.
131750664685357260
2018-07-03T04:41:08.535Z
Comment from time.h in chromium
/ Time represents an absolute point in coordinated universal time (UTC),
// internally represented as microseconds (s/1,000,000) since the Windows epoch
// (1601-01-01 00:00:00 UTC).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
microseconds since the Windows epoch
The returned value should be easy to use in JavaScript.
JavaScript Date object uses "number of milliseconds since 1 January 1970 UTC" (the epoch).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And can be null or empty if the API fails.
Please return null
if the time cannot be obtained.
atom/common/api/atom_bindings.cc
Outdated
// static | ||
int64_t AtomBindings::GetCreationTime(v8::Isolate* isolate) { | ||
auto metrics = base::CurrentProcessInfo::CreationTime(); | ||
return metrics.ToInternalValue(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is deprecated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should probably use
base::CurrentProcessInfo::CreationTime().ToJsTime()
Refs: ToJsTime()
Then users can just do new Date()
on the ret value to get a JS date
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bonus points for a new mate
converter to v8::Date
https://v8docs.nodesource.com/node-0.8/d4/df7/classv8_1_1_date.html
I.e. Convert base::Time
to v8::Date
docs/api/process.md
Outdated
|
||
Returns [`number`] | ||
Indicates the creation time of the application. | ||
The time is represented as microseconds (s/1,000,000) since the Windows epoch (1601-01-01 00:00:00 UTC) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
microseconds since the Windows epoch
The returned value should be easy to use in JavaScript.
JavaScript Date object uses "number of milliseconds since 1 January 1970 UTC" (the epoch).
spec/api-process-spec.js
Outdated
describe('process.getCreationTime()', () => { | ||
it('returns a creation time', () => { | ||
const creationTime = process.getCreationTime() | ||
assert.equal(typeof creationTime, 'number') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use expect()
assertions from the Chai library, which produce much better failure message than assert
.
const {expect} = require('chai') // On the top of the file.
...
expect(creationTime).to.be.a('number').and.be.at.least(0)
docs/api/process.md
Outdated
|
||
Returns [`number`] | ||
Indicates the creation time of the application. | ||
The time is represented as microseconds (s/1,000,000) since the Windows epoch (1601-01-01 00:00:00 UTC) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And can be null or empty if the API fails.
Please return null
if the time cannot be obtained.
@husayn if you could please address the requested changes so we can get this across the finish line, that'd be great! |
return v8::Null(isolate); | ||
} | ||
double jsTime = timeValue.ToJsTime(); | ||
return v8::Number::New(isolate, jsTime); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we not do v8 conversions manually, native_mate
will handle the conversions in a consistent way if you just return a cpp type.
I.e. Just make this return double
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
double
doesn't work if we want to return an "empty value".
And we have to return null
when the time cannot be obtained.
if (timeValue.is_null()) {
return v8::Null(isolate);
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MarshallOfSound can you please approve the changes if this looks good?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Requesting changes RE return type
docs/api/process.md
Outdated
@@ -98,6 +98,12 @@ The `process` object has the following methods: | |||
|
|||
Causes the main thread of the current process crash. | |||
|
|||
### `process.getCreationTime()` | |||
|
|||
Returns [`number`] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we return null
sometimes, it should be documented )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And btw there's no reasons to have square brackets there )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
@husayn |
docs/api/process.md
Outdated
Returns `number` | ||
Indicates the creation time of the application. | ||
The time is represented as number of milliseconds since epoch. It returns null if it is unable to get the process creation time. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we need to document this as "Returns Menu | null
" for typescript. Something like
Returns `Menu | null` - The number of milliseconds since epoch, or `null` if the information is unavailable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done @ckerr
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this comment got misplaced, no menu stuff here 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@MarshallOfSound you're correct, that should've read Number | null
. I was cribbing from another documentation line and didn't clean it up correctly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@husayn I don't know if it the capitalization is required, but all our other documentation instances use Number
rather than number
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ckerr capitalized it.
The CI failures appear to be unrelated.
|
Expose the creationTime that chromium provides us on the process object.