MZ@ !L!This program cannot be run in DOS mode. $Rؕ3}3}3}H̴3}H̱3}Rich3}PEL!  j@.rsrc@@8P h!9?@E F8LPMhNOPQRSXY(^@_Xepfklmnopq0rHs`wxx~ 8PPhx(8HXhx(8HXhxDh|^DD!6|#x%.')**+,|./,112 47|H:X<@DDTH8J&`K\KLLM|N&N NHR|6lF0}WMUIIDR_XML_BATTERY_TRANSFORMIDR_XML_DEFAULT_TRANSFORM.XSLIDR_XML_SLEEPSTUDY_TRANSFORM3_: r ȫЇi| =a2 MUI zh-CNRg1Y%Rg1Y%0ُS/f1uN]_cOWߍ*eNb]"N_NN bv0RgRRg1Y%0SN_gN~g FOُN~gS N[te0RgbRRgbR0*g~b0RHe0*gԏVNUOOo`0|~Oo`|~Oo`|~Oo``{:g T|~6R FU|~NT TyBIOS egBIOS Hr,gOS QHr,gSs^S҉rۏ zpe~ zpec5unPAs^SehVRss^SehVRsc؞vs^SehVRs/f 15.6ms (15625000ns) ^(W|~zzeO(u0YgcؚehVvRs RYthV5un{tb/gSeHe0S1uNd>eYZSOb6R\OVb_R;u cؚehVvRs0PAS_MRehVRs(100ns *NUSMO)g'YehVhTg(100ns *NUSMO) *g[bvehVBl z^b gRBlvehVRs\Ns^Sg'YehVRs0]BlhTg ck(WBlۏ z IDck(WBlۏ z_ *g[bv8h_ehVBl!8h_~NbYqR z^BlvehVRs\Ns^Sg'YehVRs0]BlhTgBlpe z^b gRBlvehVRs'YNbI{Ns^Sg'YehVRs0ehVBlXh!jWWXh#ۏ z-NvgNOs^SehVn0(u!jWW5unV{eu;mR5unR S_MRO(uv5unRR GUID5unR*NNn(O(u5u`l)|~O(u5u`lO5ueS_MR5unRv*NNn0*NNn5unR*NNn:Nؚ'`(O(u5u`l)S_|~O(u5u`lO5ue S_MR5unR*NNn:Nؚ'`0>f:yhVe]y(u(O(u5u`l)*g\>f:yhVMn:NNke N;mRTsQ0 >f:yhVe(O(u5u`l)>f:yhVMn:NǏ 5 RTsQ0e(y) Sfe]y(u(O(u5u`l)*g\>f:yhVMn:N(WNke N;mRTꁨRSf0 Sfe(O(u5u`l)>f:yhVMn:N(W 5 RTꁨRSf0e(y) xvzz]y(u(O(u5u`l)*g\xvMn:NxvNke N;mRTsQ0 xve(O(u5u`l)xvMn:N(W 30 RTsQ0e(y) aw we]y(u(O(u5u`l)*g\{:gMn:NNke N;mRTꁨRaw w0 aw we(O(u5u`l){:gMn:N(W 30 RTꁨRaw w0e(y)YthVvg\'`r`:N 100% (O(u5u`l)*g\YthVMn:N9hnc;mR`QꁨRMNO5unm0PAYthVvg\'`r`:Nؚ(O(u5u`l)YthVvgNO'`r`'YNYthVg'Y'`v 75%0g\'`r`(g'Y'`v %)YthVzzr`]y(u(O(u5u`l)S_MRYthV5un{tV{eu]y(uNORYthVzzr`0USB b'`cw]y(u(O(u5u`l)S_MR5unV{eu]hQ@\y(u USB b'`cw0802.11 e~5u5unV{eu:Ng'Y'`(O(u5u`l)&*g\&{T 802.11 ve~Q~MhVvS_MR5unV{euMn:NO(uNOR!j_0PCI Express ASPM ]y(u(O(u5u`l)'PCI Express ;mRr`5un{t(ASPM)vS_MR5unV{euMn:NsQ0PA5unR*NNn(c5un)|~c5uneS_MR5unRv*NNn05unR*NNn:Nؚ'`(c5un)|~c5uneS_MR5unRv*NNn:Nؚ'`0>f:yhVe]y(u(c5un)*g\>f:yhVMn:NNke N;mRTsQ0 >f:yhVe(c5un)\>f:yhVMn:N(W 10 RTsQ0 Sfe]y(u(c5un)*g\>f:yhVMn:N(WNke N;mRTꁨRSf0 Sfe(c5un)>f:yhVMn:N(W 10 RTꁨRSf0 xvzz]y(u(c5un)*g\xvMn:NxvNke N;mRTsQ0PA xve(c5un)xvMn:N(W 30 RTsQ0 aw we]y(u(c5un)*g\{:gMn:NNke N;mRTꁨRaw w0 aw we(c5un){:gMn:N(W 30 RTꁨRaw w0YthVvg\'`r`:N 100% (c5un)*g\YthVMn:N9hnc;mR`QꁨRMNO5unm0YthVvg\'`r`:Nؚ(c5un)YthVvgNO'`r`'YNYthVg'Y'`v 75%0YthVzzr`]y(u(c5un)S_MRYthV5un{tV{eu]y(uNORYthVzzr`0USB b'`cw]y(u(c5un)S_MR5unV{eu]hQ@\y(u USB b'`cw0PA802.11 e~5u5unV{eu:Ng'Y'`(c5un)&*g\&{T 802.11 ve~Q~MhVvS_MR5unV{euMn:NO(uNOR!j_0PCI Express ASPM ]y(u(c5un)'PCI Express ;mRr`5un{t(ASPM)vS_MR5unV{euMn:NsQ0 Ɖ(ϑ((u5u`l))(Wd>eƉe /T(u Windows Media Player SNcؚ;u(b0(ϑ!j_ Ɖ(ϑ(]ceQ))(Wd>eƉe /T(u Windows Media Player SNcؚ;u(b0|~S(u'`Bl|~vBl z^]Bl;bk|~ꁨRۏeQaw wr`0ck(WBlۏ z|~vBl gR]Bl;bk|~ꁨRۏeQaw wr`0ck(WBl gR|~vBlYbqR z^]Bl;bk|~ꁨRۏeQaw wr`0 ck(WBlqR z^[O ck(WBlqR z^YPA|~vBlQ8h~N]Bl;bk|~ꁨRۏeQaw wr`0>f:yhVvBl z^]Bl;bk>f:yhVꁨRۏeQNOR!j_0y_!j_Bl z^]Bl/T(uy_!j_0y_!j_Bl gR]Bl/T(uy_!j_0gbLvBl z^]SQgbLvBl0gbLvBl gR]SQgbLvBl0PAUSB cwUSB Y*gۏeQ b'`cwr`K勾Y*gۏeQ USB b'`cwr`0Yg USB Y*gYN b'`cwr` RSO;bkYthV5un{tvЏL0l: dk NO;bk|~ۏeQO wr`0;Nc6RhV ID;Nc6RhVMOnY IDzS_PAUSB Y_\ۏeQ b'`cwr`S勾Y(Wߍ*Ǐ z-NGk'`ۏeQ USB b'`cwr`0Yg USB Y*gYN b'`cwr` RSO;bkYthV5un{tvЏL0l: dk NO;bk|~ۏeQO wr`0cwe(%)SV'dk Bluetooth USB Y N/ec b'`cw V:NdkY N/f]O5u0(dk Bluetooth USB Y N/ec b'`cw V:NdkY N/ec܏ z$U0CPU O(usYthV)R(usNO,(Wߍ*Ǐ z-N YthVvs^GW)R(us_NO0S_YthVvs^GW)R(us_NOe |~\m\v5un0s^GW)R(us(%) YthV)R(us:N-NI{Sߍ*gYthVvs^GW)R(us:N-NI{0S_YthVvs^GW)R(us_NOe |~\m\v5un0g wUS*NYthVvYthV)R(us Nnx[TN^(u z^T gR`SncN'YRYthV)R(us0YthV)R(usؚQߍ*gYthVvs^GW)R(usؚ0S_YthVvs^GW)R(us_NOe |~\m\v5un0g wUS*NYthVvYthV)R(us Nnx[TN^(u z^T gR`SncN'YRYthV)R(us0YthV)R(usؚvUS*NYthV0dkۏ z#ߍ*gU_v'YRv;`YthV)R(us0ۏ z TPIDs^GW)R(us(%)!jWW s^GW!jWW)R(us(%)5u`l5u`lOo`5u`l ID6R FU6R eg^RSSf[bRg_spe[ϑ N!k[hQEQ5u N!k[hQEQ5u(%) N!k5u`l[hQEQ5uT [X[Pv5uϑ\N[ϑv 50%0 N!k[hQEQ5u(%)PA N!k[hQEQ5u(%) N!k5u`l[hQEQ5uT [X[Pv5uϑ\N[ϑv 40%05u`l[ϑ*gwelnx[5u`l[ϑ0ُSh:yVN(BIOS)Qs0][\PAs^S5un{tR/ecvaw wr`maw wr`AQ{:g(WNke N;mRTۏeQNOR!j_0S3 aw wr`/f Windows s^Sv؞aw wr`0S3 aw wr`NmYOYuQX[-NQ[v5unNAQ{:g_b` Y]\O0_\ gs^S/ec S1 b S2 aw wr`0S1 aw wS/ecS2 aw wS/ecS3 aw wS/ecS4 aw wS/ec"1uNX[(WNdk{:glxNv]w N|Q[ Vdky(uN S1 aw wr`07Windows (WgNwQ gNaw w N|Q[vlxNv{:g NꁨRy(uaw w0[ňgeVN(BIOS)SO㉳Qdk0PA"1uNX[(WNdk{:glxNv]w N|Q[ Vdky(uN S2 aw wr`07Windows (WgNwQ gNaw w N|Q[vlxNv{:g NꁨRy(uaw w0[ňgeVN(BIOS)SO㉳Qdk0"1uNX[(WNdk{:glxNv]w N|Q[ Vdky(uN S3 aw wr`07Windows (WgNwQ gNaw w N|Q[vlxNv{:g NꁨRy(uaw w0[ňgeVN(BIOS)SO㉳Qdk0|~VN(BIOS) N/ec S30dk{:g-NvlxN N/ec S3 aw wr`0|~VN(BIOS) N/ec S4 (O w)0dk{:g-NvlxN N/ec S4 (O w)r`0"1uNX[(WNdk{:glxNv]w N|Q[ Vdky(uN S3 aw wr`07Windows (WgNwQ gNaw w N|Q[vlxNv{:g NꁨRy(uaw w0[ňgeVN(BIOS)SO㉳Qdk0 ](W5unV{eu-Ny(uaw w0|~{tXT](Wdk|~ Ny(uaw w01uN|~wQ g*YYvirtQX[ Vdk]y(uO w01uNX[PP[|~X[(W*gw Vdk]y(uO w01uNelubbO weN Vdk]y(uO w01uN[ňNeHrqR z^ Vdk]y(uaw w0/aw wBl@b gYqR z^NsScsS(uT5un{tv|Q[0Yg[ňNeHrqR z^ ROꁨRy(uaw w0qR z^ Tyg*N|~~N]4Ney(u S1 aw wr`0[ňN N~Nbck(WgbLNRe {:gS NǏ!n0Raw wr`0&Microsoft W,g>f:yqR z^b Microsoft W,g2ngqR z^Zb:gvc z^ NZblxveN(VHD)/TR|~0g*N|~~N]4Ney(u S2 aw wr`0[ňN N~Nbck(WgbLNRe {:gS NǏ!n0Raw wr`0g*N|~~N]4Ney(u S3 aw wr`0[ňN N~Nbck(WgbLNRe {:gS NǏ!n0Raw wr`0g*N|~~N]4Ney(u S4 (O w)r`0[ňN N~Nbck(WgbLNRe {:gS NǏ!n0Raw wr`0 /ec^>f:yhVN^0dk{:gAQ Windows ꁨRc6RƖb>f:yhVvN^0 ^>f:yhVN^/ec5dk{:g NAQ Windows ꁨRc6RƖb>f:yhVvN^0[ňgev|~VN(BIOS)SO㉳Qdk0 YthV5un{tR gHevYthV5un{tAQ{:gꁨRs^a'`Tϑm0~"}_ zz(C)r`pe '`(P)r`pe Am(T)r`peACPI C2 r`1Y%,dk{:g Nv C2 zzr`v[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0 ACPI C3 1Y%,dk{:g Nv C3 zzr`v[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0 ACPI Amr`1Y%(dk{:g NvAmr`v[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _CST [a1Y%1dk{:g Nv ACPI _CST [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _CSD [a1Y%1dk{:g Nv ACPI _CSD [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _PCT [a1Y%1dk{:g Nv ACPI _PCT [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _PSS [a1Y%1dk{:g Nv ACPI _PSS [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI XPSS [a1Y%2dk{:g Nv ACPI XPSS [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _PPC [a1Y%PA1dk{:g Nv ACPI _PPC [av[INX[(W0[ňge|~VN(BIOS]S㉳Qdk0ACPI _PSD [a1Y%1dk{:g Nv ACPI _PSD [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _PTC [a1Y%1dk{:g Nv ACPI _PTC [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _TSS [a1Y%1dk{:g Nv ACPI _TSS [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _TPC [a1Y%1dk{:g Nv ACPI _TPC [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _TSD [a1Y%1dk{:g Nv ACPI _TSD [av[INX[(W0[ňge|~VN(BIOS]S㉳Qdk0YthVzzr`WbXTpe Ncknx,[IN:NYthVzzWvbXTvYthVpeX[(W0[ňge|~VN(BIOS)S㉳Qdk0W IDgbXTpe[EbXTpePAYthV'`bAmr`WbXTpe Ncknx1[IN:NYthV'`bAmr`WvbXTvYthVpeX[(W0[ňge|~VN(BIOS)S㉳Qdk0 YthVzzr`]y(u71uNX[(WNdk{:glxNv]w N|Q[ ]ꁨRy(uYthVzzr`0[ňge|~VN(BIOS)S㉳Qdk0 YthV'`r`]y(u71uNX[(WNdk{:glxNv]w N|Q[ ]ꁨRy(uYthV'`r`0[ňge|~VN(BIOS]S㉳Qdk0 YthVAmr`]y(u:1uNdk{:gvlxNX[(W]wv N|Q[ VdkYthVAmr`]ꁨRy(u0[ňgev|~VN(BIOS)S㉳Qdk0PCI Express ;mRr`5un{t(ASPM)]y(u81uNNdk{:g NvlxNNuN]wv N|Q[ Vdk]y(u PCI Express ;mRr`5un{t(ASPM)0e~p N/ec WMM @{:gޏc0Rve~p N/ec WMM !j_0WLAN 6RhVelۏeQ!j_eg cgqe~MhV5unV{eu-N[INve_0SSIDMAC 0W@Wޏc_:g/ec;ޏc_:gSNO{:gۏeQNORs!j_ (W!j_ N {:gY~_/TTޏc0YgS/ec RO(uޏc_:g N/f|~aw wr`0ޏc_:gS/ecACPI PCCP [a1Y%1dk{:g Nv ACPI PCCP [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0ACPI _CPC [a1Y%1dk{:g Nv ACPI _CPC [av[INX[(W0[ňge|~VN(BIOS)S㉳Qdk0zzr`pezzr`{|W hys(MHz)g'Y'`~vRkgNO'`~vRkgNOP6R~vRk'`c6R{|WeACPI '`(P)r`/P6R(T)r`s^Sec6RACPI OS\OYthV'`c6R5un_dcN ACPI zz(C)r` Windows To Go1uNlxN N|Q[ ]y(u ޏc_:g 01ُS{:g]/ec ޏc_:g FO/fN*NbY*NlxN~N N&{Tdkr`vBl0 N&{TُNBlv~NY N:X[PlxNWLAN lxNyR[&^lxN󗑘lxN&{T N&{T_5un_dcNPAYqR z^YqR z^:1YbMn NS_SO[5uϑXR0Y TY IDYr`YNx*gwYaw wRgla: dkbJT-N NS+T,{N*Nޏc_:gO݋vOo`0,{N*Nޏc_:gO݋](WeveVQ/TR0傁N勃eveV O(u&lt;code&gt;powercfg sleepstudy -duration DURATION&lt;/code&gt;0OY 傁[ǏS 10 )YۏLRg ^O(u:&lt;br /&gt;&lt;pre&gt;powercfg sleepstudy -duration 10&lt;/pre&gt; Sso;mhVvRg ~b0R Fx YvRg~b0R PDC 6kvRgPDC 6kvc~e;`T'YN CS c~e0PAY TPAPPOo` 4VS_VERSION_INFO@%@%?StringFileInfo080404B0LCompanyNameMicrosoft Corporation6FileDescription5unHesʋer)FileVersion6.3.9600.16384 (winblue_rtm.130821-1623)6 InternalNameenergy.dll.LegalCopyright Microsoft Corporation. All rights reserved.FOriginalFilenameenergy.dll.muij%ProductNameMicrosoft Windows Operating SystemBProductVersion6.3.9600.16384DVarFileInfo$Translation Suspended Active Report generated Battery changed Connected standby Screen off Battery AC even odd // Formats a number using the current locale (to handle the 1000's separator). // The result is rounded so no decimal point is shown. function numberToLocaleString(value) { var localeString = Math.round(parseFloat(value + '')).toLocaleString(); return localeString.substring(0, localeString.indexOf('.')); } function padLeft(number, length) { var str = '' + number; while (str.length < length) { str = '0' + str; } return str; } // Returns the number of milliseconds between 2 date-times represented as strings. function msBetween(startTime, endTime) { return startTime > endTime ? msBetween(endTime, startTime) : parseDateTime(endTime) - parseDateTime(startTime); } var dateFormat = /(\d{4})-(\d{2})-(\d{2})[T](\d{2}):(\d{2}):(\d{2})/ // Parses a date-time string and returns a Date (i.e. number of milliseconds) function parseDateTime(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3] + ' ' + match[4] + ':' + match[5] + ':' + match[6]) } // Parses just the date portion of a date-time string and returns a Date // (i.e. number of milliseconds) function parseDate(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3]) } var durationFormat = /P((\d+)D)?T((\d+)H)?((\d+)M)?(\d+)S/ // Convert a string of the form P10DT1H15M40S to a count of milliseconds function parseDurationToMs(value) { var match = durationFormat.exec(value) if (!match) { return 0 } var days = parseInt(match[2] || '0'); var hrs = parseInt(match[4] || '0'); var mins = parseInt(match[6] || '0'); var secs = parseInt(match[7] || '0'); return ((((((days * 24) + hrs) * 60) + mins) * 60) + secs) * 1000; } // Converts milliseconds to days function msToDays(ms) { return (ms / 1000 / 60 / 60 / 24); } function daysToMs(days) { return (days * 24 * 60 * 60 * 1000); } // Formats a number of milliseconds as h:mm:ss function formatDurationMs(value) { var ms = parseInt(value); var secs = ms / 1000; var mins = secs / 60; var hrs = Math.floor(mins / 60); mins = Math.floor(mins % 60); secs = Math.floor(secs % 60); return hrs + ':' + padLeft(mins,2) + ':' + padLeft(secs,2); } // Converts a millisecond timestamp to a day and month string // Note: dayOffset is forward from date. function dateToDayAndMonth(ms, dayOffset) { var adjustedDate = new Date(ms + (dayOffset * 24 * 60 * 60 * 1000)); return padLeft(adjustedDate.getMonth() + 1, 2) + "-" + padLeft(adjustedDate.getDate(), 2); } // Takes a millisecond timestamp and returns a new millisecond timestamp // rounded down to the current day. function dateFloor(ms) { var dt = new Date(ms); return Date.parse(dt.getFullYear() + '/' + (dt.getMonth() + 1) + '/' + dt.getDate()); } Timegraph = { axisTop: 9.5, axisRight: 24.5, axisBottom: 25.5, axisLeft: 25.5, ticks: 10, // Maximum number of 24 hour ticks for showing 12 and 6 hour ticks ticks12Hour: 8, ticks6Hour: 4, // Shading lineColor: "#B82830", shadingColor: "#4d1d35", precompute: function (graph) { var canvas = graph.canvas; var data = graph.data; var min = 0; var max = 0; graph.height = canvas.height - Timegraph.axisTop - Timegraph.axisBottom; graph.width = canvas.width - Timegraph.axisLeft - Timegraph.axisRight; for (var i = 0; i < data.length; i++) { data[i].t0 = parseDateTime(data[i].x0); data[i].t1 = parseDateTime(data[i].x1); if (i == 0) { min = data[i].t0; max = data[i].t1; } if (data[i].t0 < min) { min = data[i].t0; } if (data[i].t1 > max) { max = data[i].t1; } data[i].yy0 = Timegraph.axisTop + graph.height - data[i].y0 * graph.height; data[i].yy1 = Timegraph.axisTop + graph.height - data[i].y1 * graph.height; } if (graph.startTime != null) { graph.startMs = parseDateTime(graph.startTime); } else { graph.startMs = min; } graph.endMs = max; graph.durationMs = max - min; }, drawFrame: function (graph) { var canvas = graph.canvas; var context = graph.context; graph.width = canvas.width - Timegraph.axisRight - Timegraph.axisLeft; graph.height = canvas.height - Timegraph.axisTop - Timegraph.axisBottom; context.beginPath(); context.moveTo(Timegraph.axisLeft, Timegraph.axisTop); context.lineTo(Timegraph.axisLeft + graph.width, Timegraph.axisTop); context.lineTo(Timegraph.axisLeft + graph.width, Timegraph.axisTop + graph.height); context.lineTo(Timegraph.axisLeft, Timegraph.axisTop + graph.height); context.lineTo(Timegraph.axisLeft, Timegraph.axisTop); context.strokeStyle = "#c0c0c0"; context.stroke(); }, drawRange: function (graph) { var canvas = graph.canvas; var context = graph.context; context.font = "12pt Segoe UI"; context.fillStyle = "#00b0f0"; context.fillText("%", 0, Timegraph.axisTop + 5, Timegraph.axisLeft); var tickSpacing = graph.height / 10; var offset = Timegraph.axisTop + tickSpacing; var tickValue = 90; for (var i = 0; i < 9; i++) { context.beginPath(); context.moveTo(Timegraph.axisLeft, offset); context.lineTo(Timegraph.axisLeft + graph.width, offset); context.stroke(); context.fillText(tickValue.toString(), 0, offset + 5, Timegraph.axisLeft); offset += tickSpacing; tickValue -= 10; } }, drawDomain: function (graph, start, end) { var canvas = graph.canvas; var context = graph.context; var data = graph.data; var duration = end - start; if ((end < start)) { return; } var startDay = dateFloor(start); var t0 = startDay; var t1 = dateFloor(end); var dayOffset = 0; if (start > t0) { t0 = t0 + daysToMs(1); dayOffset++; } if (t0 >= t1) { return; } var increment = Math.max(Math.floor((t1 - t0) / daysToMs(Timegraph.ticks)), 1); var incrementMs = daysToMs(increment); var spacing = (incrementMs / duration) * graph.width; var offset = (t0 - start) / duration; var ticksCount = Math.floor((t1 - t0) / incrementMs); for (offset = offset * graph.width + Timegraph.axisLeft; offset < (graph.width + Timegraph.axisLeft); offset += spacing) { context.beginPath(); context.moveTo(offset, Timegraph.axisTop); context.lineTo(offset, Timegraph.axisTop + graph.height); context.stroke(); context.fillText(dateToDayAndMonth(startDay, dayOffset), offset, Timegraph.axisTop + graph.height + 15, spacing); dayOffset += increment; } }, plot: function (graph, start, end) { var canvas = graph.canvas; var context = graph.context var data = graph.data; if ((end < start)) { return; } var duration = end - start; Timegraph.drawDomain(graph, start, end); context.fillStyle = Timegraph.shadingColor; for (var i = 0; i < data.length - 1; i++) { if ((data[i].t0 < start) || (data[i].t0 > end) || (data[i].t1 > end)) { continue; } var x1 = (data[i].t0 - start) / duration; x1 = x1 * graph.width + Timegraph.axisLeft; var x2 = (data[i].t1 - start) / duration; x2 = x2 * graph.width + Timegraph.axisLeft; context.globalAlpha = 0.3; context.fillRect(x1, Timegraph.axisTop, (x2 - x1), graph.height); context.globalAlpha = 1; context.beginPath(); context.strokeStyle = Timegraph.lineColor; context.lineWidth = 1.5; context.moveTo(x1, data[i].yy0); context.lineTo(x2, data[i].yy1); context.stroke(); } }, draw: function (graph) { var canvas = document.getElementById(graph.element); if (canvas == null) { return; } var context = canvas.getContext('2d'); if (context == null) { return; } graph.width = 0; graph.height = 0; graph.context = context; graph.canvas = canvas; Timegraph.precompute(graph); Timegraph.drawFrame(graph); Timegraph.drawRange(graph); Timegraph.plot(graph, graph.startMs, graph.endMs); } }; { x0: "", x1: "", y0: , y1: }, drainGraphData = [ ];

Battery report

COMPUTER NAME
SYSTEM PRODUCT NAME
BIOS
OS BUILD
PLATFORM ROLE
CONNECTED STANDBY Supported Not supported
REPORT TIME

Installed batteries

Information about each currently installed battery
No batteries are currently installed
BATTERY
NAME
MANUFACTURER
SERIAL NUMBER
CHEMISTRY
DESIGN CAPACITY -
FULL CHARGE CAPACITY -
CYCLE COUNT

Recent usage

Power states over the last days
START TIME STATE SOURCE CAPACITY REMAINING
- - - - -

Battery usage

Battery drains over the last days
START TIME STATE DURATION ENERGY DRAINED
- - - - -

Usage history

History of system usage on AC and battery
BATTERY DURATION AC DURATION
PERIOD ACTIVE CONNECTED STANDBY ACTIVE CONNECTED STANDBY
- - - - -
- - - - -

Battery capacity history

Charge capacity history of the system's batteries
PERIOD FULL CHARGE CAPACITY DESIGN CAPACITY
- - -

Battery life estimates

Battery life estimates based on observed drains
AT FULL CHARGE AT DESIGN CAPACITY
PERIOD ACTIVE CONNECTED STANDBY ACTIVE CONNECTED STANDBY
- - - - -
Current estimate of battery life based on all observed drains since OS install
Since OS install - -
/ 16 h
- -
/ 16 h
- -
/ 16 h
- -
/ 16 h
Battery report


- - mWh - mWh - % - % - endTime ? msBetween(endTime, startTime) : parseDateTime(endTime) - parseDateTime(startTime); } var dateFormat = /(\d{4})-(\d{2})-(\d{2})[T](\d{2}):(\d{2}):(\d{2})/ // Parses a date-time string and returns a Date (i.e. number of milliseconds) function parseDateTime(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3] + ' ' + match[4] + ':' + match[5] + ':' + match[6]) } // Parses just the date portion of a date-time string and returns a Date (i.e. number of milliseconds) function parseDate(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3]) } var durationFormat = /P((\d+)D)?T((\d+)H)?((\d+)M)?(\d+)S/ // Convert a string of the form P10DT1H15M40S to a count of milliseconds function parseDurationToMs(value) { var match = durationFormat.exec(value) if (!match) { return 0 } var days = parseInt(match[2] || '0'); var hrs = parseInt(match[4] || '0'); var mins = parseInt(match[6] || '0'); var secs = parseInt(match[7] || '0'); return ((((((days * 24) + hrs) * 60) + mins) * 60) + secs) * 1000; } // Formats a number of milliseconds as h:mm:ss function formatDurationMs(value) { var ms = parseInt(value); var secs = ms / 1000; var mins = secs / 60; var hrs = Math.floor(mins / 60); mins = Math.floor(mins % 60); secs = Math.floor(secs % 60); return hrs + ':' + padLeft(mins,2) + ':' + padLeft(secs,2); } // Converts a string representing a date time to a day and month string function dateToDayAndMonth(date, dayOffset) { var adjustedDate = new Date(parseDate(date) - (dayOffset * 24 * 60 * 60 * 1000)); return padLeft(adjustedDate.getMonth() + 1, 2) + "-" + adjustedDate.getDate(); } ]]>

电源效率诊断报告

计算机名
扫描时间
扫描持续时间
系统制造商
系统产品名称
BIOS 日期
BIOS 版本
OS 内部版本
平台角色
接通电源
进程计数
线程计数
报告 GUID {}

分析结果

警告: 跟踪期间事件丢失。这可能导致分析结果不完整。

错误

警告

信息

error-log-entry warning-log-entry info-log-entry
:
节能 高性能 平衡 计划名 OEM 节能 OEM 高性能 OEM 平衡 自定义 优化视频质量 在视频质量和节能之间寻求平衡 优化节能 模块 模块的平均利用率(%) 调用模块堆栈 未知模块
 Connected standby Screen off // Add support for drawing dashed lines to Canvas CanvasRenderingContext2D.prototype.dashedLine = function (x0, y0, x1, y1, dashArray) { if (dashArray == null) { dashArray = [4, 4]; } var dx = x1 - x0; var dy = y1 - y0; var distance = Math.sqrt(Math.pow((x1 - x0), 2) + Math.pow((y1 - y0), 2)); var theta = Math.atan(dy / dx); if (dx < 0) { theta += Math.PI; } var i = 0; while (distance > 0) { var length = Math.min(distance, dashArray[i]); x0 += length * Math.cos(theta); y0 += length * Math.sin(theta); if (i % 2 == 0) { this.lineTo(x0, y0); } else { this.moveTo(x0, y0); } distance -= length; i = (i + 1) % dashArray.length; } }; // Formats a number using the current locale (to handle the 1000's separator). // The result is rounded so no decimal point is shown. function numberToLocaleString(value) { var localeString = Math.round(parseFloat(value + '')).toLocaleString(); return localeString.substring(0, localeString.indexOf('.')); } function padLeft(number, length) { var str = '' + number; while (str.length < length) { str = '0' + str; } return str; } // Returns the number of milliseconds between 2 date-times represented as strings. function msBetween(startTime, endTime) { return startTime > endTime ? msBetween(endTime, startTime) : parseDateTime(endTime) - parseDateTime(startTime); } var dateFormat = /(\d{4})-(\d{2})-(\d{2})[T](\d{2}):(\d{2}):(\d{2})/ // Parses a date-time string and returns a Date (i.e. number of milliseconds) function parseDateTime(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3] + ' ' + match[4] + ':' + match[5] + ':' + match[6]) } // Parses just the date portion of a date-time string and returns a Date // (i.e. number of milliseconds) function parseDate(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3]) } var durationFormat = /P((\d+)D)?T((\d+)H)?((\d+)M)?(\d+)S/ // Convert a string of the form P10DT1H15M40S to a count of milliseconds function parseDurationToMs(value) { var match = durationFormat.exec(value) if (!match) { return 0 } var days = parseInt(match[2] || '0'); var hrs = parseInt(match[4] || '0'); var mins = parseInt(match[6] || '0'); var secs = parseInt(match[7] || '0'); return ((((((days * 24) + hrs) * 60) + mins) * 60) + secs) * 1000; } // Converts milliseconds to days function msToDays(ms) { return (ms / 1000 / 60 / 60 / 24); } function daysToMs(days) { return (days * 24 * 60 * 60 * 1000); } // Formats a number of milliseconds as h:mm:ss function formatDurationMs(value) { var ms = parseInt(value); var secs = ms / 1000; var mins = secs / 60; var hrs = Math.floor(mins / 60); mins = Math.floor(mins % 60); secs = Math.floor(secs % 60); return hrs + ':' + padLeft(mins,2) + ':' + padLeft(secs,2); } // Converts a millisecond timestamp to a day and month string // Note: dayOffset is forward from date. function dateToDayAndMonth(ms, dayOffset) { var adjustedDate = new Date(ms + (dayOffset * 24 * 60 * 60 * 1000)); return padLeft(adjustedDate.getMonth() + 1, 2) + "-" + padLeft(adjustedDate.getDate(), 2); } // Takes a millisecond timestamp and returns a new millisecond timestamp // rounded down to the current day. function dateFloor(ms) { var dt = new Date(ms); return Date.parse(dt.getFullYear() + '/' + (dt.getMonth() + 1) + '/' + dt.getDate()); } Timegraph = { axisTop: 9.5, axisRight: 24.5, axisBottom: 25.5, axisLeft: 25.5, ticks: 10, // Maximum number of 24 hour ticks for showing 12 and 6 hour ticks ticks12Hour: 8, ticks6Hour: 4, // Shading shadingColor: "#d0d0d0", precompute: function (graph) { var canvas = graph.canvas; var data = graph.data; var min = 0; var max = 0; graph.height = canvas.height - Timegraph.axisTop - Timegraph.axisBottom; graph.width = canvas.width - Timegraph.axisLeft - Timegraph.axisRight; for (var i = 0; i < data.length; i++) { data[i].t0 = parseDateTime(data[i].x0); data[i].t1 = parseDateTime(data[i].x1); if (i == 0) { min = data[i].t0; max = data[i].t1; } if (data[i].t0 < min) { min = data[i].t0; } if (data[i].t1 > max) { max = data[i].t1; } data[i].yy0 = Timegraph.axisTop + graph.height - data[i].y0 * graph.height; data[i].yy1 = Timegraph.axisTop + graph.height - data[i].y1 * graph.height; } if (graph.startTime != null) { graph.startMs = parseDateTime(graph.startTime); } else { graph.startMs = min; } graph.endMs = max; graph.durationMs = max - min; }, drawFrame: function (graph) { var canvas = graph.canvas; var context = graph.context; graph.width = canvas.width - Timegraph.axisRight - Timegraph.axisLeft; graph.height = canvas.height - Timegraph.axisTop - Timegraph.axisBottom; context.beginPath(); context.moveTo(Timegraph.axisLeft, Timegraph.axisTop); context.lineTo(Timegraph.axisLeft + graph.width, Timegraph.axisTop); context.lineTo(Timegraph.axisLeft + graph.width, Timegraph.axisTop + graph.height); context.lineTo(Timegraph.axisLeft, Timegraph.axisTop + graph.height); context.lineTo(Timegraph.axisLeft, Timegraph.axisTop); context.strokeStyle = "#c0c0c0"; context.stroke(); }, drawRange: function (graph) { var canvas = graph.canvas; var context = graph.context; context.font = "12pt Segoe UI"; context.fillStyle = "#00b0f0"; context.fillText("%", 0, Timegraph.axisTop + 5, Timegraph.axisLeft); var tickSpacing = graph.height / 10; var offset = Timegraph.axisTop + tickSpacing; var tickValue = 90; for (var i = 0; i < 9; i++) { context.beginPath(); context.moveTo(Timegraph.axisLeft, offset); context.lineTo(Timegraph.axisLeft + graph.width, offset); context.stroke(); context.fillText(tickValue.toString(), 0, offset + 5, Timegraph.axisLeft); offset += tickSpacing; tickValue -= 10; } }, drawDomain: function (graph, start, end) { var canvas = graph.canvas; var context = graph.context; var data = graph.data; var duration = end - start; if ((end < start)) { return; } var startDay = dateFloor(start); var t0 = startDay; var t1 = dateFloor(end); var dayOffset = 0; if (start > t0) { t0 = t0 + daysToMs(1); dayOffset++; } if (t0 >= t1) { return; } var increment = Math.max(Math.floor((t1 - t0) / daysToMs(Timegraph.ticks)), 1); var incrementMs = daysToMs(increment); var spacing = (incrementMs / duration) * graph.width; var offset = (t0 - start) / duration; var ticksCount = Math.floor((t1 - t0) / incrementMs); for (offset = offset * graph.width + Timegraph.axisLeft; offset < (graph.width + Timegraph.axisLeft); offset += spacing) { context.beginPath(); context.moveTo(offset, Timegraph.axisTop); context.lineTo(offset, Timegraph.axisTop + graph.height); context.stroke(); context.fillText(dateToDayAndMonth(startDay, dayOffset), offset, Timegraph.axisTop + graph.height + 15, spacing); dayOffset += increment; } }, plot: function (graph, start, end) { var canvas = graph.canvas; var context = graph.context var data = graph.data; if ((end < start)) { return; } var duration = end - start; Timegraph.drawDomain(graph, start, end); context.fillStyle = Timegraph.shadingColor; for (var i = 0; i < data.length - 1; i++) { if ((data[i].t0 < start) || (data[i].t0 > end) || (data[i].t1 > end)) { continue; } var x1 = (data[i].t0 - start) / duration; x1 = x1 * graph.width + Timegraph.axisLeft; var x2 = (data[i].t1 - start) / duration; x2 = x2 * graph.width + Timegraph.axisLeft; context.globalAlpha = 0.3; context.fillRect(x1, Timegraph.axisTop, (x2 - x1), graph.height); context.globalAlpha = 1; context.beginPath(); context.strokeStyle = graph.lineTypes[data[i].type].color; context.lineWidth = 1.5; if (graph.lineTypes[data[i].type].dotted == 1) { context.dashedLine(x1, data[i].yy0, x2, data[i].yy1); } else { context.moveTo(x1, data[i].yy0); context.lineTo(x2, data[i].yy1); } context.stroke(); } }, draw: function (graph) { var canvas = document.getElementById(graph.element); if (canvas == null) { return; } var context = canvas.getContext('2d'); if (context == null) { return; } graph.width = 0; graph.height = 0; graph.context = context; graph.canvas = canvas; Timegraph.precompute(graph); Timegraph.drawFrame(graph); Timegraph.drawRange(graph); Timegraph.plot(graph, graph.startMs, graph.endMs); } }; Histogram = { // Constants yTicks: 10, axisLeft: 30.5, axisBottom: 25.5, paddingTop: 5, maxPadding: 25, barColor: "#1191c1", // Functions precompute: function (graph) { var canvas = graph.canvas; var bucketCount = 0; for (var i = 0; i < graph.data.length; i++) { if (graph.data[i].value > graph.max) { graph.max = graph.data[i].value; } bucketCount++; } if (graph.rangeMax != null) { graph.max = Math.max(graph.max, graph.rangeMax); } graph.bucketCount = bucketCount; graph.tickSpacing = (canvas.width - Histogram.axisLeft) / bucketCount; graph.height = canvas.height; graph.width = canvas.width; }, drawFrame: function (graph) { var context = graph.context; var canvas = graph.canvas; context.beginPath(); context.moveTo(Histogram.axisLeft, Histogram.paddingTop); context.lineTo(Histogram.axisLeft, canvas.height - Histogram.axisBottom); context.lineTo(canvas.width, canvas.height - Histogram.axisBottom); context.stroke(); }, drawDomain: function (graph) { var context = graph.context; var tickOffset = 0; context.font = "8pt Segoe UI"; context.fillStyle = "#00b0f0"; for (var i = 0; i < graph.bucketCount; i++) { context.fillText(graph.data[i].interval, Histogram.axisLeft + tickOffset + 2, graph.height - 10, graph.tickSpacing); tickOffset += graph.tickSpacing; } }, drawRange: function (graph) { var context = graph.context; var tickSpacing = (graph.height - Histogram.axisBottom - 25) / Histogram.yTicks; var tickIncrement = Math.round(graph.max / Histogram.yTicks); var tickOffset = graph.height - Histogram.axisBottom - tickSpacing; var tickValue = tickIncrement; context.font = "12pt Segoe UI"; context.fillStyle = "#00b0f0"; for (var i = 0; i < Histogram.yTicks; i++) { context.beginPath(); context.moveTo(Histogram.axisLeft, tickOffset); context.lineTo(Histogram.axisLeft + 5, tickOffset); context.stroke(); context.fillText(tickValue.toString(), 0, tickOffset + 5, Histogram.axisLeft); tickValue += tickIncrement; tickOffset -= tickSpacing; } }, plot: function (graph) { var tickOffset = 0; var context = graph.context; context.fillStyle = Histogram.barColor; for (var i = 0; i < graph.bucketCount; i++) { if (graph.data[i].value == 0) { tickOffset += graph.tickSpacing;; continue; } var barHeight = Math.round((graph.data[i].value * (graph.height - 50)) / graph.max); context.fillRect(Histogram.axisLeft + tickOffset + Histogram.paddingTop, graph.height - Histogram.axisBottom - barHeight, graph.tickSpacing - 10, barHeight); tickOffset += graph.tickSpacing; } }, draw: function (graph) { var canvas = document.getElementById(graph.element); if (canvas == null) { return; } var context = canvas.getContext("2d"); if (context == null) { return; } if (graph.data == null) { return; } graph.bucketCount = 0; graph.max = 0; graph.tickSpacing = 0; graph.wdith = 0; graph.height = 0; graph.context = context; graph.canvas = canvas; context.strokeStyle = "#c0c0c0"; Histogram.precompute(graph); Histogram.drawFrame(graph); Histogram.drawRange(graph); Histogram.drawDomain(graph); Histogram.plot(graph); } }; Collapser = { topActiveBlockerDivs: {}, detailsContainers: {}, getContainerBody: function (container) { var children = container.childNodes; var containerBody = null; for (var i = 0; i < children.length; i++) { if (children[i].tagName == "DIV" && (children[i].className == "analysis-body-collapsed" || children[i].className == "analysis-body")) { containerBody = children[i]; break; } } return containerBody; }, togglePanel: function (container) { var containerBody = Collapser.getContainerBody(container); if (containerBody == null) { return; } var heading = container.getElementsByTagName("H1")[0]; var expander = heading.getElementsByClassName("expander")[0]; if (containerBody.className == "analysis-body-collapsed") { containerBody.className = "analysis-body"; expander.innerHTML = "- "; } else { containerBody.className = "analysis-body-collapsed"; expander.innerHTML = "+ "; } }, toggleDetails: function (element) { if (element.className == "scenario-details-collapsed") { element.className = "scenario-details"; } else { element.className = "scenario-details-collapsed"; } }, initializePanels: function () { var elements = document.getElementsByClassName("analysis-container"); for (var i = 0; i < elements.length; i++) { var element = elements[i]; var heading = element.getElementsByTagName("h1")[0]; if (heading == null) { continue; } heading.onclick = function () { var container = this.parentNode; Collapser.togglePanel(container); }; } }, initializeDetails: function() { var elements = document.getElementsByClassName("details-expander"); for (var i = 0; i < elements.length; i++) { var element = elements[i]; var targetId = "details-" + element.id.replace("details-expand-", ""); var targetElement = document.getElementById(targetId); Collapser.detailsContainers[element.id] = targetElement; element.onclick = function () { var targetElement = Collapser.detailsContainers[this.id]; Collapser.toggleDetails(targetElement); }; } }, initializeLinks: function () { var links = document.getElementsByClassName("top-active-link"); for (var i = 0; i < links.length; i++) { var link = links[i]; var targetId = link.getAttribute("href").substring(1); var targetElement = document.getElementById(targetId); if (targetElement.tagName.toLowerCase() == "tr") { // tr, tbody, table, div.analysis-body-*, div.analysis-container Collapser.topActiveBlockerDivs[targetId] = targetElement.parentNode.parentNode.parentNode.parentNode; } else { Collapser.topActiveBlockerDivs[targetId] = targetElement; } link.onclick = function () { var targetId = this.getAttribute("href").substring(1); var targetContainer = Collapser.topActiveBlockerDivs[targetId]; var container = targetContainer; while ((container != null) && (container.tagName == "DIV")) { var containerBody = Collapser.getContainerBody(container); if (containerBody == null) { return; } if (containerBody.className == "analysis-body-collapsed") { Collapser.togglePanel(container); } container = container.parentNode.parentNode; } targetContainer.scrollIntoView(true); }; } }, initializeCollapser: function () { Collapser.initializePanels(); Collapser.initializeDetails(); TableDecorator.decorate({ element: ".top-blocker", withClass: "top-active-link" }); Collapser.initializeLinks(); }, initialize: function () { if (window.addEventListener != null) { window.addEventListener("load", Collapser.initializeCollapser, false); } else if (window.attachEvent != null) { window.attachEvent("onload", Collapser.initializeCollapser); } } }; TableDecorator = { decorateTable: function (table, linkClass) { if (table == null) { return; } var rows = table.getElementsByTagName("tr"); for (var i = 0; i < rows.length; i++) { var row = rows[i]; var anchor = row.getElementsByClassName("row-link")[0]; if (anchor == null || anchor.tagName.toLowerCase() != "a") { continue; } var link = anchor.getAttribute("href"); for (var j = 0; j < row.children.length; j++) { var cell = row.children[j]; if (cell == anchor.parentNode) { continue; } var classString = ""; if (linkClass != null) { classString = " class=\"" + linkClass + "\""; } cell.innerHTML = "<a href=\"" + link + "\"" + classString + ">" + cell.innerHTML + "</a>"; } } }, decorate: function (tableData) { var selection = tableData.element; if (selection.charAt(0) == ".") { var className = selection.substring(1); var elements = document.getElementsByClassName(className); for (var i = 0; i < elements.length; i++) { if (elements[i].tagName.toLowerCase() == "table") { TableDecorator.decorateTable(elements[i], tableData.withClass); } } } else if (selection.charAt(0) == "#") { var idName = selection.substring(1); var element = document.getElementById(idName); if (element.tagName.toLowerCase() == "table") { TableDecorator.decorateTable(element, tableData.withClass); } } }, }; function initializeScrollTop() { var elements = document.getElementsByClassName("scroll-top-button"); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.onclick = function () { window.scroll(0, 0); window.location.replace("#"); if (typeof window.history.replaceState == "function") { history.replaceState({}, "", window.location.href.slice(0, -1)); } } } } { x0: "", x1: "", y0: , y1: , type: 0 2 3 4 1 0 4 }, drainGraphData = [ ]; Histogram.draw({ element: "drips-histogram-", data: dripsBuckets_, rangeMax: 100 }); dripsBuckets_ = [ ]; { interval : " ", value : },

+

COMPUTER NAME
SYSTEM PRODUCT NAME
BIOS
OS BUILD
PLATFORM ROLE
REPORT TIME
Legend
GRAPH LINE DESCRIPTION
Dotted AC power
Solid Battery power
No line System powered off
Grey Active Scenario
Green Low System Activity
Orange Moderate System Activity
Red High System Activity
START TIME DURATION ENERGY CHANGE CHANGE RATE % LOW POWER STATE TIME
- - - - - - - -
row- #connected-standby-session- row-link Drain Charge % HW: % % connected-standby-session-
Top

Connected Standby Session

row-
START TIME DURATION ENERGY CHANGE CHANGE RATE % LOW POWER STATE TIME
Drain Charge % HW: % % details-expander details-expand-
scenario-details-collapsed details-
IR TRUNCATE PERCENTAGE %
PEP PRE-VETO COUNT
PEP VETO COUNT

DRIPS Histogram

Percent of time spent in DRIPS bucketed by time interval length
drips-histogram- 864 300

Top Offenders

Top 5 offenders, ranked by active time
NAME TYPE % ACTIVE TIME ACTIVE TIME
SPM Scenario Time Active Time Disabled Time Suspended Time Disengaged
n/a n/a % row- #offender- top-active-link row-link Unknown

+

analysis-container analysis-

+ Processors

No processor activity reported.
analysis-container analysis- offender-

+

% ACTIVE TIME ACTIVE TIME
analysis-container analysis-

+ Activators

No activator activity reported.
analysis-container analysis- offender-

+

% ACTIVE TIME ACTIVE TIME
offender- row-
analysis-container analysis-

+ PDC Phases

PHASE % TIME TIME
analysis-container analysis-

+ Fx Devices

No device activity reported.
analysis-container analysis- offender-

+

% ACTIVE TIME ACTIVE TIME
COMPONENT % ACTIVE TIME ACTIVE TIME
3 row- No active components.
row-
analysis-container analysis- offender-

+ Networking

No networking activity reported.
analysis-container analysis-

+ Other

analysis-container analysis- offender-

+

% ACTIVE TIME ACTIVE TIME

Installed batteries

Information about each currently installed battery
No batteries are currently installed.
BATTERY
NAME
MANUFACTURER
SERIAL NUMBER
CHEMISTRY
DESIGN CAPACITY -
CAPACITY RATIO %
CYCLE COUNT
Sleep Study

Sleep Study

Connected Standby Transitions

Battery drains over the last days
Connected Standby transitions over the last days

Analysis Results

Analysis of issues that might cause poor battery life



- - mWh - mWh % of battery - - % - mW - % - endTime ? msBetween(endTime, startTime) : parseDateTime(endTime) - parseDateTime(startTime); } var dateFormat = /(\d{4})-(\d{2})-(\d{2})[T](\d{2}):(\d{2}):(\d{2})/ // Parses a date-time string and returns a Date (i.e. number of milliseconds) function parseDateTime(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3] + ' ' + match[4] + ':' + match[5] + ':' + match[6]) } // Parses just the date portion of a date-time string and returns a Date (i.e. number of milliseconds) function parseDate(value) { if (!value) { return 0; } var match = dateFormat.exec(value) if (!match) { return 0; } return Date.parse(match[1] + '/' + match[2] + '/' + match[3]) } var durationFormat = /P((\d+)D)?T((\d+)H)?((\d+)M)?(\d+)S/ // Convert a string of the form P10DT1H15M40S to a count of milliseconds function parseDurationToMs(value) { var match = durationFormat.exec(value) if (!match) { return 0 } var days = parseInt(match[2] || '0'); var hrs = parseInt(match[4] || '0'); var mins = parseInt(match[6] || '0'); var secs = parseInt(match[7] || '0'); return ((((((days * 24) + hrs) * 60) + mins) * 60) + secs) * 1000; } // Formats a number of milliseconds as h:mm:ss function formatDurationMs(value) { var ms = parseInt(value); var secs = ms / 1000; var mins = secs / 60; var hrs = Math.floor(mins / 60); mins = Math.floor(mins % 60); secs = Math.floor(secs % 60); return hrs + ':' + padLeft(mins,2) + ':' + padLeft(secs,2); } // Converts a string representing a date time to a day and month string function dateToDayAndMonth(date, dayOffset) { var adjustedDate = new Date(parseDate(date) - (dayOffset * 24 * 60 * 60 * 1000)); return padLeft(adjustedDate.toLocaleDateString()); } ]]>
PPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGX