I have the answer. So model.predict() behind the scenes is actually executing all library JS code and WebGL commands but the result will come back only after all the GPU commands are done.
Thus to time how long this takes you should use a Date.now() right before you call model.predict() and then after model.predict() you should then call result.dataSync() to actually await for the result to come back. You can then use a 2nd Date.now() after that line to get the total time for result to return. So something like this:
let initialTime = Date.now();
let result = model.predict();
// Synchronously download data from Tensor. 
// You could also use async call using just result.data() and use an await with that.
let data = result.dataSync();
let finalTime = Date.now();
let timeTaken = finalTime - initialTime;