Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save LumingYin/4dc83c7d9a0e2f5b2a87bb7246ed9bbc to your computer and use it in GitHub Desktop.
Save LumingYin/4dc83c7d9a0e2f5b2a87bb7246ed9bbc to your computer and use it in GitHub Desktop.

Revisions

  1. @gruber gruber revised this gist May 24, 2017. 1 changed file with 116 additions and 116 deletions.
    232 changes: 116 additions & 116 deletions Battery Test — Chrome.scpt
    Original file line number Diff line number Diff line change
    @@ -1,147 +1,147 @@
    on run
    set imessage_id to "" -- leave blank to skip sending periodic iMessage progress updates, put your iMessage ID here to get updates as the script runs
    set delay_seconds to 5 -- Don't set to 0, it runs too fast. 0.75 is a good setting for "go fast".
    set computer_name to do shell script "scutil --get ComputerName"
    set os_version to do shell script "sw_vers -productVersion"
    set os_build to do shell script "sw_vers -buildVersion"
    set _uptime to do shell script "uptime"
    set url_list to {"http://techmeme.com", "http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/", "https://twitter.com/panzer/status/812367550734401536", "http://www.politico.com/story/2016/12/foreign-travelers-social-media-232930", "http://www.macworld.com/article/3153384/gaming/nintendo-plans-to-release-2-or-3-mobile-games-a-year-after-super-mario-runs-success.html", "http://www.wsj.com/articles/cyber-experts-cite-link-between-dnc-hacks-and-aggression-against-ukraine-1482385672", "http://www.theverge.com/2016/12/22/14057656/google-smartwatch-android-wear-2-0-launch", "http://vator.tv/news/2016-12-22-glu-acquires-plain-vanilla-the-studio-behind-quizup", "http://www.wsj.com/articles/alibaba-enlists-brands-to-help-snuff-out-knockoffs-1482477161", "http://adage.com/article/digital/mrc-talks-facebook-metrics-audits/307280/", "http://www.businessinsider.com/twitter-app-bug-inflated-video-ad-metrics-by-as-much-as-35-2016-12?op=1", "http://venturebeat.com/2016/12/22/ubers-self-driving-cars-flee-to-arizona-after-california-shutdown/", "https://techcrunch.com/2016/12/22/clusterhq-hits-the-deadpool/", "http://www.macrumors.com/2016/12/23/apple-pulls-all-withings-accessories-nokia-lawsuit/", "http://www.smh.com.au/business/media-and-marketing/video-games-website-steam-fined-3-million-for-refusing-refunds-20161223-gthdux.html", "https://www.bloomberg.com/news/articles/2016-12-23/megafon-to-buy-mail-ru-stake-for-740-million-from-usmanov", "http://variety.com/2016/digital/news/snapchat-abc-the-bachelor-aftershow-1201946670/", "https://www.bloomberg.com/news/articles/2016-12-23/silver-lake-said-to-join-1-2-billion-round-in-key-alibaba-arm", "http://www.nytimes.com/2016/12/22/arts/music/apple-music-platform-promoter-both.html", "http://www.theverge.com/2016/12/22/14059678/bittorrent-live-video-streaming-app-available-ios", "https://techcrunch.com/2016/12/22/pokemon-go-arrives-on-the-apple-watch/", "http://www.theverge.com/2016/12/21/14030820/djay-pro-iphone-announced", "http://business.financialpost.com/fp-tech-desk/crtc-declares-high-speed-internet-a-basic-service-creates-750-million-fund?__lsa=5138-faf6", "https://www.fastcompany.com/3066733/fast-cities/new-york-citys-tech-community-is-getting-a-250-million-home-base-at-union-square", "http://www.wsj.com/articles/baidu-plans-1-billion-ipo-for-video-streaming-site-iqiyi-com-1482398700", "https://9to5mac.com/2016/12/21/apple-delays-requirement-for-https/"}
    -- Short list of URLs for testing, comment out for real testing:
    #set url_list to {"http://daringfireball.net/", "http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/", "https://twitter.com/panzer/status/812367550734401536"}
    if not IsRunningOnBattery() then
    display alert "Not running on battery power" message "This test is meant to measure battery life. Unplug from AC Power and double-check display brightness level before proceeding." as critical buttons {"Cancel", "Proceed"} default button "Proceed"
    if button returned of the result is not "Proceed" then return -- stop script
    end if
    -- Logging Preamble
    WriteToLog("") -- blank line to separate log entries
    WriteToLog("Starting Chrome battery test on " & computer_name & linefeed & (current date))
    WriteToLog("OS version: " & os_version & " (" & os_build & ")")
    WriteToLog("Battery: " & my GetBatteryPercentage())
    WriteToLog("Display brightness: " & my GetDisplayBrightness())
    WriteToLog("Uptime: " & _uptime)
    WriteToLog("Running apps: " & my GetRunningApps())
    tell application "Google Chrome"
    activate
    set _cycles to 0
    set start_time to current date
    repeat
    close every window -- start each cycle by closing any open windows
    set _cycles to _cycles + 1
    repeat with _url in url_list
    open location _url
    delay delay_seconds
    repeat 3 times
    my PageDown()
    delay delay_seconds
    end repeat
    end repeat
    set elapsed_seconds to (current date) - start_time
    set elapsed_str to my SecondsToHoursMinutes(elapsed_seconds)
    set log_msg to (elapsed_str & ": " & "(" & _cycles & " cycles): " & my GetBatteryPercentage()) as string
    my WriteToLog(log_msg)
    -- Send text message update only every Nth cycle:
    if (_cycles mod 3 is 0) and (imessage_id is not "") then my SendiMessage(computer_name & ": " & log_msg, imessage_id)
    delay 0 -- How long to wait before starting all over again.
    end repeat
    end tell
    set imessage_id to "" -- leave blank to skip sending periodic iMessage progress updates, put your iMessage ID here to get updates as the script runs
    set delay_seconds to 5 -- Don't set to 0, it runs too fast. 0.75 is a good setting for "go fast".
    set computer_name to do shell script "scutil --get ComputerName"
    set os_version to do shell script "sw_vers -productVersion"
    set os_build to do shell script "sw_vers -buildVersion"
    set _uptime to do shell script "uptime"
    set url_list to {"http://techmeme.com", "http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/", "https://twitter.com/panzer/status/812367550734401536", "http://www.politico.com/story/2016/12/foreign-travelers-social-media-232930", "http://www.macworld.com/article/3153384/gaming/nintendo-plans-to-release-2-or-3-mobile-games-a-year-after-super-mario-runs-success.html", "http://www.wsj.com/articles/cyber-experts-cite-link-between-dnc-hacks-and-aggression-against-ukraine-1482385672", "http://www.theverge.com/2016/12/22/14057656/google-smartwatch-android-wear-2-0-launch", "http://vator.tv/news/2016-12-22-glu-acquires-plain-vanilla-the-studio-behind-quizup", "http://www.wsj.com/articles/alibaba-enlists-brands-to-help-snuff-out-knockoffs-1482477161", "http://adage.com/article/digital/mrc-talks-facebook-metrics-audits/307280/", "http://www.businessinsider.com/twitter-app-bug-inflated-video-ad-metrics-by-as-much-as-35-2016-12?op=1", "http://venturebeat.com/2016/12/22/ubers-self-driving-cars-flee-to-arizona-after-california-shutdown/", "https://techcrunch.com/2016/12/22/clusterhq-hits-the-deadpool/", "http://www.macrumors.com/2016/12/23/apple-pulls-all-withings-accessories-nokia-lawsuit/", "http://www.smh.com.au/business/media-and-marketing/video-games-website-steam-fined-3-million-for-refusing-refunds-20161223-gthdux.html", "https://www.bloomberg.com/news/articles/2016-12-23/megafon-to-buy-mail-ru-stake-for-740-million-from-usmanov", "http://variety.com/2016/digital/news/snapchat-abc-the-bachelor-aftershow-1201946670/", "https://www.bloomberg.com/news/articles/2016-12-23/silver-lake-said-to-join-1-2-billion-round-in-key-alibaba-arm", "http://www.nytimes.com/2016/12/22/arts/music/apple-music-platform-promoter-both.html", "http://www.theverge.com/2016/12/22/14059678/bittorrent-live-video-streaming-app-available-ios", "https://techcrunch.com/2016/12/22/pokemon-go-arrives-on-the-apple-watch/", "http://www.theverge.com/2016/12/21/14030820/djay-pro-iphone-announced", "http://business.financialpost.com/fp-tech-desk/crtc-declares-high-speed-internet-a-basic-service-creates-750-million-fund?__lsa=5138-faf6", "https://www.fastcompany.com/3066733/fast-cities/new-york-citys-tech-community-is-getting-a-250-million-home-base-at-union-square", "http://www.wsj.com/articles/baidu-plans-1-billion-ipo-for-video-streaming-site-iqiyi-com-1482398700", "https://9to5mac.com/2016/12/21/apple-delays-requirement-for-https/"}
    -- Short list of URLs for testing, comment out for real testing:
    #set url_list to {"http://daringfireball.net/", "http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/", "https://twitter.com/panzer/status/812367550734401536"}
    if not IsRunningOnBattery() then
    display alert "Not running on battery power" message "This test is meant to measure battery life. Unplug from AC Power and double-check display brightness level before proceeding." as critical buttons {"Cancel", "Proceed"} default button "Proceed"
    if button returned of the result is not "Proceed" then return -- stop script
    end if
    -- Logging Preamble
    WriteToLog("") -- blank line to separate log entries
    WriteToLog("Starting Chrome battery test on " & computer_name & linefeed & (current date))
    WriteToLog("OS version: " & os_version & " (" & os_build & ")")
    WriteToLog("Battery: " & my GetBatteryPercentage())
    WriteToLog("Display brightness: " & my GetDisplayBrightness())
    WriteToLog("Uptime: " & _uptime)
    WriteToLog("Running apps: " & my GetRunningApps())
    tell application "Google Chrome"
    activate
    set _cycles to 0
    set start_time to current date
    repeat
    close every window -- start each cycle by closing any open windows
    set _cycles to _cycles + 1
    repeat with _url in url_list
    open location _url
    delay delay_seconds
    repeat 3 times
    my PageDown()
    delay delay_seconds
    end repeat
    end repeat
    set elapsed_seconds to (current date) - start_time
    set elapsed_str to my SecondsToHoursMinutes(elapsed_seconds)
    set log_msg to (elapsed_str & ": " & "(" & _cycles & " cycles): " & my GetBatteryPercentage()) as string
    my WriteToLog(log_msg)
    -- Send text message update only every Nth cycle:
    if (_cycles mod 3 is 0) and (imessage_id is not "") then my SendiMessage(computer_name & ": " & log_msg, imessage_id)
    delay 0 -- How long to wait before starting all over again.
    end repeat
    end tell
    end run


    on PageDown()
    tell application "System Events"
    key code 121
    -- 121: page down
    -- 116: page up
    end tell
    tell application "System Events"
    key code 121
    -- 121: page down
    -- 116: page up
    end tell
    end PageDown

    on GetBatteryPercentage()
    -- Returns battery percentage with the % symbol: "100%"
    try
    set _battery to do shell script "pmset -g batt | egrep -o '\\d+%'"
    on error
    set _battery to "(No battery)"
    end try
    return _battery
    -- Returns battery percentage with the % symbol: "100%"
    try
    set _battery to do shell script "pmset -g batt | egrep -o '\\d+%'"
    on error
    set _battery to "(No battery)"
    end try
    return _battery
    end GetBatteryPercentage

    on GetDisplayBrightness()
    set brightness_info to do shell script "ioreg -c AppleBacklightDisplay -r -w 0 | egrep -o '\"brightness\"={.+?}'"
    try
    -- Example for words of brightness_info:
    -- `{"brightness", "=", "max", "=", "1024", "min", "=", "0", "value", "=", "704"}`
    if word 3 of brightness_info is "max" then set b_max to word 5 of brightness_info
    if word 9 of brightness_info is "value" then set b_val to word 11 of brightness_info
    set current_brightness to (b_val as real) / b_max as real
    on error
    set current_brightness to "(indeterminate)"
    end try
    return current_brightness
    set brightness_info to do shell script "ioreg -c AppleBacklightDisplay -r -w 0 | egrep -o '\"brightness\"={.+?}'"
    try
    -- Example for words of brightness_info:
    -- `{"brightness", "=", "max", "=", "1024", "min", "=", "0", "value", "=", "704"}`
    if word 3 of brightness_info is "max" then set b_max to word 5 of brightness_info
    if word 9 of brightness_info is "value" then set b_val to word 11 of brightness_info
    set current_brightness to (b_val as real) / b_max as real
    on error
    set current_brightness to "(indeterminate)"
    end try
    return current_brightness
    end GetDisplayBrightness

    on GetRunningApps()
    tell application "System Events" to set running_apps to name of every application process whose background only is false
    set old_TID to text item delimiters
    set text item delimiters to ", "
    set running_apps to running_apps as string
    set text item delimiters to old_TID
    return running_apps
    tell application "System Events" to set running_apps to name of every application process whose background only is false
    set old_TID to text item delimiters
    set text item delimiters to ", "
    set running_apps to running_apps as string
    set text item delimiters to old_TID
    return running_apps
    end GetRunningApps

    on IsRunningOnBattery()
    try
    set _result to do shell script "pmset -g batt | egrep 'Now drawing from'"
    on error
    display alert "Error determining if running on battery."
    end try
    if _result contains "Battery Power" then
    return true
    else
    return false
    end if
    try
    set _result to do shell script "pmset -g batt | egrep 'Now drawing from'"
    on error
    display alert "Error determining if running on battery."
    end try
    if _result contains "Battery Power" then
    return true
    else
    return false
    end if
    end IsRunningOnBattery

    on WriteToLog(_msg as string)
    do shell script "echo " & quoted form of _msg & " >> ~/Desktop/ChromeBatteryTest.log"
    do shell script "echo " & quoted form of _msg & " >> ~/Desktop/ChromeBatteryTest.log"
    end WriteToLog

    on SendiMessage(msg_text as string, msg_recipient as string)
    tell application "Messages"
    send msg_text to buddy msg_recipient of (service 1 whose service type is iMessage)
    end tell
    tell application "Messages"
    send msg_text to buddy msg_recipient of (service 1 whose service type is iMessage)
    end tell
    end SendiMessage

    on SecondsToHoursMinutes(_secs)
    -- Convert seconds to "h:mm" string
    set _hours to _secs div (60 * 60)
    set _minutes to (_secs div 60) mod 60
    return (_hours & "h:" & AddLeadingZeros(_minutes, 1) & "m") as string
    -- Convert seconds to "h:mm" string
    set _hours to _secs div (60 * 60)
    set _minutes to (_secs div 60) mod 60
    return (_hours & "h:" & AddLeadingZeros(_minutes, 1) & "m") as string
    end SecondsToHoursMinutes

    on AddLeadingZeros(this_number, maxleading_zeros)
    -- Source: https://www.macosxautomation.com/applescript/sbrt/sbrt-02.html
    set the threshold_number to (10 ^ maxleading_zeros) as integer
    if this_number is less than the threshold_number then
    set the leading_zeros to ""
    set the digit_count to the length of ((this_number div 1) as string)
    set the character_count to (maxleading_zeros + 1) - digit_count
    repeat character_count times
    set the leading_zeros to (the leading_zeros & "0") as string
    end repeat
    return (leading_zeros & (this_number as text)) as string
    else
    return this_number as text
    end if
    -- Source: https://www.macosxautomation.com/applescript/sbrt/sbrt-02.html
    set the threshold_number to (10 ^ maxleading_zeros) as integer
    if this_number is less than the threshold_number then
    set the leading_zeros to ""
    set the digit_count to the length of ((this_number div 1) as string)
    set the character_count to (maxleading_zeros + 1) - digit_count
    repeat character_count times
    set the leading_zeros to (the leading_zeros & "0") as string
    end repeat
    return (leading_zeros & (this_number as text)) as string
    else
    return this_number as text
    end if
    end AddLeadingZeros

  2. @gruber gruber created this gist May 24, 2017.
    147 changes: 147 additions & 0 deletions Battery Test — Chrome.scpt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,147 @@
    on run
    set imessage_id to "" -- leave blank to skip sending periodic iMessage progress updates, put your iMessage ID here to get updates as the script runs
    set delay_seconds to 5 -- Don't set to 0, it runs too fast. 0.75 is a good setting for "go fast".

    set computer_name to do shell script "scutil --get ComputerName"
    set os_version to do shell script "sw_vers -productVersion"
    set os_build to do shell script "sw_vers -buildVersion"
    set _uptime to do shell script "uptime"

    set url_list to {"http://techmeme.com", "http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/", "https://twitter.com/panzer/status/812367550734401536", "http://www.politico.com/story/2016/12/foreign-travelers-social-media-232930", "http://www.macworld.com/article/3153384/gaming/nintendo-plans-to-release-2-or-3-mobile-games-a-year-after-super-mario-runs-success.html", "http://www.wsj.com/articles/cyber-experts-cite-link-between-dnc-hacks-and-aggression-against-ukraine-1482385672", "http://www.theverge.com/2016/12/22/14057656/google-smartwatch-android-wear-2-0-launch", "http://vator.tv/news/2016-12-22-glu-acquires-plain-vanilla-the-studio-behind-quizup", "http://www.wsj.com/articles/alibaba-enlists-brands-to-help-snuff-out-knockoffs-1482477161", "http://adage.com/article/digital/mrc-talks-facebook-metrics-audits/307280/", "http://www.businessinsider.com/twitter-app-bug-inflated-video-ad-metrics-by-as-much-as-35-2016-12?op=1", "http://venturebeat.com/2016/12/22/ubers-self-driving-cars-flee-to-arizona-after-california-shutdown/", "https://techcrunch.com/2016/12/22/clusterhq-hits-the-deadpool/", "http://www.macrumors.com/2016/12/23/apple-pulls-all-withings-accessories-nokia-lawsuit/", "http://www.smh.com.au/business/media-and-marketing/video-games-website-steam-fined-3-million-for-refusing-refunds-20161223-gthdux.html", "https://www.bloomberg.com/news/articles/2016-12-23/megafon-to-buy-mail-ru-stake-for-740-million-from-usmanov", "http://variety.com/2016/digital/news/snapchat-abc-the-bachelor-aftershow-1201946670/", "https://www.bloomberg.com/news/articles/2016-12-23/silver-lake-said-to-join-1-2-billion-round-in-key-alibaba-arm", "http://www.nytimes.com/2016/12/22/arts/music/apple-music-platform-promoter-both.html", "http://www.theverge.com/2016/12/22/14059678/bittorrent-live-video-streaming-app-available-ios", "https://techcrunch.com/2016/12/22/pokemon-go-arrives-on-the-apple-watch/", "http://www.theverge.com/2016/12/21/14030820/djay-pro-iphone-announced", "http://business.financialpost.com/fp-tech-desk/crtc-declares-high-speed-internet-a-basic-service-creates-750-million-fund?__lsa=5138-faf6", "https://www.fastcompany.com/3066733/fast-cities/new-york-citys-tech-community-is-getting-a-250-million-home-base-at-union-square", "http://www.wsj.com/articles/baidu-plans-1-billion-ipo-for-video-streaming-site-iqiyi-com-1482398700", "https://9to5mac.com/2016/12/21/apple-delays-requirement-for-https/"}

    -- Short list of URLs for testing, comment out for real testing:
    #set url_list to {"http://daringfireball.net/", "http://www.consumerreports.org/laptops/macbook-pros-fail-to-earn-consumer-reports-recommendation/", "https://twitter.com/panzer/status/812367550734401536"}

    if not IsRunningOnBattery() then
    display alert "Not running on battery power" message "This test is meant to measure battery life. Unplug from AC Power and double-check display brightness level before proceeding." as critical buttons {"Cancel", "Proceed"} default button "Proceed"
    if button returned of the result is not "Proceed" then return -- stop script
    end if

    -- Logging Preamble
    WriteToLog("") -- blank line to separate log entries
    WriteToLog("Starting Chrome battery test on " & computer_name & linefeed & (current date))
    WriteToLog("OS version: " & os_version & " (" & os_build & ")")
    WriteToLog("Battery: " & my GetBatteryPercentage())
    WriteToLog("Display brightness: " & my GetDisplayBrightness())
    WriteToLog("Uptime: " & _uptime)
    WriteToLog("Running apps: " & my GetRunningApps())

    tell application "Google Chrome"
    activate
    set _cycles to 0
    set start_time to current date

    repeat
    close every window -- start each cycle by closing any open windows
    set _cycles to _cycles + 1
    repeat with _url in url_list
    open location _url
    delay delay_seconds
    repeat 3 times
    my PageDown()
    delay delay_seconds
    end repeat
    end repeat

    set elapsed_seconds to (current date) - start_time
    set elapsed_str to my SecondsToHoursMinutes(elapsed_seconds)
    set log_msg to (elapsed_str & ": " & "(" & _cycles & " cycles): " & my GetBatteryPercentage()) as string
    my WriteToLog(log_msg)
    -- Send text message update only every Nth cycle:
    if (_cycles mod 3 is 0) and (imessage_id is not "") then my SendiMessage(computer_name & ": " & log_msg, imessage_id)

    delay 0 -- How long to wait before starting all over again.
    end repeat
    end tell
    end run


    on PageDown()
    tell application "System Events"
    key code 121
    -- 121: page down
    -- 116: page up
    end tell
    end PageDown

    on GetBatteryPercentage()
    -- Returns battery percentage with the % symbol: "100%"
    try
    set _battery to do shell script "pmset -g batt | egrep -o '\\d+%'"
    on error
    set _battery to "(No battery)"
    end try
    return _battery
    end GetBatteryPercentage

    on GetDisplayBrightness()
    set brightness_info to do shell script "ioreg -c AppleBacklightDisplay -r -w 0 | egrep -o '\"brightness\"={.+?}'"

    try
    -- Example for words of brightness_info:
    -- `{"brightness", "=", "max", "=", "1024", "min", "=", "0", "value", "=", "704"}`
    if word 3 of brightness_info is "max" then set b_max to word 5 of brightness_info
    if word 9 of brightness_info is "value" then set b_val to word 11 of brightness_info
    set current_brightness to (b_val as real) / b_max as real
    on error
    set current_brightness to "(indeterminate)"
    end try
    return current_brightness
    end GetDisplayBrightness

    on GetRunningApps()
    tell application "System Events" to set running_apps to name of every application process whose background only is false
    set old_TID to text item delimiters
    set text item delimiters to ", "
    set running_apps to running_apps as string
    set text item delimiters to old_TID
    return running_apps
    end GetRunningApps

    on IsRunningOnBattery()
    try
    set _result to do shell script "pmset -g batt | egrep 'Now drawing from'"
    on error
    display alert "Error determining if running on battery."
    end try

    if _result contains "Battery Power" then
    return true
    else
    return false
    end if
    end IsRunningOnBattery

    on WriteToLog(_msg as string)
    do shell script "echo " & quoted form of _msg & " >> ~/Desktop/ChromeBatteryTest.log"
    end WriteToLog

    on SendiMessage(msg_text as string, msg_recipient as string)
    tell application "Messages"
    send msg_text to buddy msg_recipient of (service 1 whose service type is iMessage)
    end tell
    end SendiMessage

    on SecondsToHoursMinutes(_secs)
    -- Convert seconds to "h:mm" string
    set _hours to _secs div (60 * 60)
    set _minutes to (_secs div 60) mod 60
    return (_hours & "h:" & AddLeadingZeros(_minutes, 1) & "m") as string
    end SecondsToHoursMinutes

    on AddLeadingZeros(this_number, maxleading_zeros)
    -- Source: https://www.macosxautomation.com/applescript/sbrt/sbrt-02.html
    set the threshold_number to (10 ^ maxleading_zeros) as integer
    if this_number is less than the threshold_number then
    set the leading_zeros to ""
    set the digit_count to the length of ((this_number div 1) as string)
    set the character_count to (maxleading_zeros + 1) - digit_count
    repeat character_count times
    set the leading_zeros to (the leading_zeros & "0") as string
    end repeat
    return (leading_zeros & (this_number as text)) as string
    else
    return this_number as text
    end if
    end AddLeadingZeros