<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>61427</bug_id>
          
          <creation_ts>2011-05-25 01:13:31 -0700</creation_ts>
          <short_desc>Web Inspector: improve output of console.log(object)</short_desc>
          <delta_ts>2012-08-02 07:44:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>66023</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">me</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>mike</cc>
    
    <cc>paulirish</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>xperts</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>409512</commentid>
    <comment_count>0</comment_count>
      <attachid>94751</attachid>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-05-25 01:13:31 -0700</bug_when>
    <thetext>Created attachment 94751
console.log(obj) output

Take a look at attached mockup.

The problem is console.log and console.dir don&apos;t show keys and values of an object until I click on ▶.

If you like the idea then could you give me some pointers to getting started. Which files should I edit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411616</commentid>
    <comment_count>1</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-27 12:41:34 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Created an attachment (id=94751) [details]
&gt; console.log(obj) output
&gt; 
&gt; Take a look at attached mockup.
&gt; 
&gt; The problem is console.log and console.dir don&apos;t show keys and values of an object until I click on ▶.
&gt; 
&gt; If you like the idea then could you give me some pointers to getting started. Which files should I edit?

The screenshot looks nice, but we need to figure out the way that does not regress performance.

- As if today, we issue single &quot;Runtime.evaluate&quot; request to the backend to get a resulting object handle. We render it as &quot;&gt; Classname&quot; (&quot;&gt; Object&quot; in your case).
- Upon expansion, we send additional request &quot;Runtime.getProperties&quot; that returns properties of the object.

In your case, we would need to send evaluate, and, in case of &quot;object&quot; type result, we should query for its properties immediately. However, this will be slow for &quot;window&quot; object due to large amount of properties.

Object handle that is returned from &quot;Runtime.evaluate&quot; has &quot;description&quot; property among others. This description property is computed in InjectedScriptSource.js (you will also find source code for evalute and getProperties there). One of the solutions would be to pass optional &quot;formatter&quot; script snippet to the &quot;evaluate&quot; and other methods that would calculate object&apos;s description. You will then be able to inject a little snippet that traverses 10 first object properties (or similar), formats them as JSON and sends them back. Or we could make this formatter static so that you could assign it once (probably a better solution).

Files you will need to touch are:
- Inspector.json to declare new setFormatterScript message in Runtime domain
- InjectedScriptSource.js - add setFormatter, modify evaluate, getProperties logic to use new formatter
- InjectedScript.h/cpp - API to InjectedScriptSource.js
- Formatter code in ConsoleView.js and ObjectPropertiesSection.js so that they were using &quot;description&quot; as they should.

I am probably forgetting something, but it should give you a clue on the scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412136</commentid>
    <comment_count>2</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-05-29 23:57:05 -0700</bug_when>
    <thetext>I didn&apos;t realize that evaluation happens on the back-end. I don&apos;t think I&apos;m able to do C++ part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412146</commentid>
    <comment_count>3</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-05-30 00:36:34 -0700</bug_when>
    <thetext>I wonder why do we need a backend written in C++ to get all keys of an object? It seems feasible to do in pure JS https://gist.github.com/367080/#L93. Is it all about performance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412174</commentid>
    <comment_count>4</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-05-30 02:47:02 -0700</bug_when>
    <thetext>http://elv1s.ru/files/js/getOwnPropertyNames_performance.html
Object.getOwnPropertyNames(window) took on average between 0–1ms. Looks very fast to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412176</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-30 03:13:45 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; http://elv1s.ru/files/js/getOwnPropertyNames_performance.html
&gt; Object.getOwnPropertyNames(window) took on average between 0–1ms. Looks very fast to me.

Actual backend implementation of this method is JavaScript-based: http://codesearch.google.com/codesearch/p?hl=en#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/InjectedScriptSource.js&amp;q=InjectedScriptSource.js&amp;exact_package=chromium&amp;l=152

You still need to add native accessors in InjectedScript.h/cpp for the methods you add into it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412191</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-30 04:54:42 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I wonder why do we need a backend written in C++ to get all keys of an object? It seems feasible to do in pure JS https://gist.github.com/367080/#L93. Is it all about performance?

The keys are collected in JavaScript (see Source/WebCore/inspector/InjectedScriptSource.js) while C++ bindigs are used to get access from the injected script to some parts of WebCore. Also transport for serialized JSON messages between backend and frontend is implemented in C++.

As Pavel said, in this particular case you should be able to achieve the goal using only JavaScript part. The protocole already supports evaluation in the context of inspected page and evaluation on an object. This should be enough for collecting keys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412608</commentid>
    <comment_count>7</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2011-05-31 07:30:53 -0700</bug_when>
    <thetext>I wonder if this would be a good candidate for a &quot;plugin&quot;?

I actually prefer the existing output rendering, but can see how people might want the proposed one also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412679</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-05-31 09:10:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I wonder if this would be a good candidate for a &quot;plugin&quot;?
&gt; 
&gt; I actually prefer the existing output rendering, but can see how people might want the proposed one also.

We don&apos;t expose API to the console object formatting today. It sounds like it would increase the API surface significantly.

I think that in this case, Nikita&apos;s proposal is generic enough to incorporate it into the inspector core. It does not seem to regress anything provided that we do it in a bit more Firebug-ish manner. I.e. keep expand arrow and current behavior + render several properties inline as a part of object description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425364</commentid>
    <comment_count>9</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-06-22 10:56:21 -0700</bug_when>
    <thetext>Should I build WebKit every time I edit back-end js files? Tools/Scripts/build-webkit takes 1h 45min for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425962</commentid>
    <comment_count>10</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-06-22 22:43:45 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Should I build WebKit every time I edit back-end js files? Tools/Scripts/build-webkit takes 1h 45min for me.
If you&apos;re talking about InjectedScriptSource.js and DebuggerScript.js then the answer is yes since those files are first translated into C++ constants which are compiled along with the rest of inspector native code. Incremental build should be much faster than 1h45min.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426874</commentid>
    <comment_count>11</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2011-06-24 07:13:32 -0700</bug_when>
    <thetext>How can I do an incremental build? &quot;build-webkit --debug&quot;, that mentioned here http://www.webkit.org/building/build.html, seems to do a full build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426879</commentid>
    <comment_count>12</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-06-24 07:21:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; How can I do an incremental build? &quot;build-webkit --debug&quot;, that mentioned here http://www.webkit.org/building/build.html, seems to do a full build.

Well, it should do the full build only on the first run, after that it should compile only changed files and their dependencies. There are no special flags for that. Also if you are building on Linux, I&apos;d recommend you use gold as a linker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617858</commentid>
    <comment_count>13</comment_count>
    <who name="">xperts</who>
    <bug_when>2012-05-07 13:11:09 -0700</bug_when>
    <thetext>What about as an alternative implementation just adding a shortcut that will expand the first expandable arrow in the current object?  The shortcut could simply be a trigger caused by the left arrow being pressed while focus is in the console and the console input is currently empt&quot;.

And if you wanted to be complete about it, the logical extension of this solution could be to keep expanding the first arrow with each left arrow keypress until you reach the end of the &quot;tree&quot;, then go back up and start expanding at the next arrow that hasn&apos;t been expanded on any of the objects.  This way you could eventually reach an entirely expanded object at all nodes.

But just having the ability to expand the initial object when typed into the console would be huge.  A large portion of the time that something is typed into console an object is returned, and when that happens it is necessary to click on the object about 99% of the time (in my experience).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683132</commentid>
    <comment_count>14</comment_count>
    <who name="Paul Irish">paulirish</who>
    <bug_when>2012-07-31 08:51:42 -0700</bug_when>
    <thetext>Looks like a first pass at this was done by Pavel over in bug 66023.

Screenshot: https://bug-66023-attachments.webkit.org/attachment.cgi?id=104192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685374</commentid>
    <comment_count>15</comment_count>
    <who name="Paul Irish">paulirish</who>
    <bug_when>2012-08-02 07:44:11 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 66023 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>94751</attachid>
            <date>2011-05-25 01:13:31 -0700</date>
            <delta_ts>2011-05-25 01:13:31 -0700</delta_ts>
            <desc>console.log(obj) output</desc>
            <filename>console_objects_output_improvement.png</filename>
            <type>image/png</type>
            <size>10875</size>
            <attacher name="Nikita Vasilyev">me</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
      

    </bug>

</bugzilla>