It is "none of the above" :-) Well...sort of.
It depends on what the *client* is doing. Your (c) is the closest.
To explain what I mean, I did this in SQL Plus
SQL> create table t as select * from dba_objects;
Table created.
So that table has approx 100k rows. Then I popped into SQL Developer and did a simple "select * from t".
(My) SQL Developer will fetch 200 rows and then display to the user. So if I trace *just* that, I see this in the tkprof
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 26 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.01 0.04 5 7 0 200
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.01 0.04 5 7 26 200
That elapsed time is the time it took to open, and fetch 200 rows. That query is still "open" (ie, I could fetch *more* rows from it).
If I keep scrolling down in SQL Dev to get more rows, I'll see stuff like this in the trace file when I re-process it
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 6 0.00 0.09 15 28 0 1200
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 8 0.00 0.09 15 28 0 1200
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 107
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 6 0.00 0.00
SQL*Net more data to client 6 0.00 0.00
SQL*Net message from client 6 10.77 24.83
Disk file operations I/O 1 0.00 0.00
db file scattered read 2 0.01 0.01
********************************************************************************
So you can see the total elapsed time went up, but it does not contain the "dead time" (ie, when I was just looking at the screen) but the time to extract and fetch more rows. (You can see the 'dead time' in the SQL*Net message from client ... around 24 seconds)
So elapsed time is time spent doing work, where "work" is retrieving the data from the database *and* sending it to the requesting client.