Unfortunately, ngRepeat doesn't provide what you're asking for. ngRepeatStart/End are just markers where the sequence starts/ends, not where the rendering starts/ends. (It's used for things like making headers/footers out of some of the rows in a set, or maybe simple pagination.)
The real problem with rendering is that you never know where you actually are in the rendering chain when you're in Angular. A directive like the one you want would be difficult/impossible to even create. When Angular starts rendering, it starts "walking" the DOM, looking at every item/child and "compiling" those elements as it goes. At any time, transclusion operations can cause it to start a whole new sequence. You see this a lot with custom element-type directives.
Angular ends up doing this in two passes: compile and link. It's not until you get to the link stage that you could even dream of calculating the height of an item, because that's where the objects are actually added to the DOM. But during this stage, you're still on the main thread (JS has only one) so the browser probably hasn't had a chance to calculate it yet!
My suggestion would be to change tactics. Use some sort of debounce and setImmediate facility to let the processing loop finish what it's doing, and then do any of your size-checking updates required at that point. You can easily detect when an element needs this done with a simple directive - any directive with ANY link function at all will have that get called when the item is rendered.
So my suggestions is:
- Write a "iWasDrawn" directive with a simple link function.
- In that link function, call a 'debounce' or 'setImmediate' function with a debounce - pick your choice, there are dozens.
- In that callback, do your size calculation.
This should be efficient, it should work, and it is pretty simple.